Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Бухгалтерия 7.7 переполнилась дбф 1SENTRY.DBF

v7: Бухгалтерия 7.7 переполнилась дбф 1SENTRY.DBF
Я
   vin1c
 
06.04.21 - 09:33
Раньше такое бывало, сворачивал базу и все окей.
Этот раз сложнее, открываю журнал многих документов нет там, базу переиндексировал перед этим, смотрю проводки: проводки есть но они не прицеплены к документам. Смотрю таблицы дбф вьювером: 1SENTRY.DBF,1SCRDOC.DBF,1SJOURN.DBF все на месте (сравнивал с рабочей базой). Новый документ не дает создать. Что могло повредиться? Пробовал выгружать в sql базу, выгрузились только те проводки которые соединены с документами.
   Garykom
 
1 - 06.04.21 - 09:38
(0) индексы перескочили?
   Garykom
 
2 - 06.04.21 - 09:39
(1)+ какой номер идет после 9999 если размер поля 4 ? 0000, затем 0001!
   Ёпрст
 
3 - 06.04.21 - 10:56
(0) размер таблички 1SENTRY.DBF какой хоть, для начала ?
   vin1c
 
4 - 06.04.21 - 11:45
Размер 1160 кв.
Где посмотреть номер 9999?
   vin1c
 
5 - 06.04.21 - 11:46
в CDX?
   VladZ
 
6 - 06.04.21 - 12:12
(0) Переходите на восьмерку.
   ShAV
 
7 - 06.04.21 - 12:19
(6) а если клиент напрочь отказывается от v8?
   Ёпрст
 
8 - 06.04.21 - 12:28
(4) это еще далеко до предела. Ставьте заплатку от hogik
   Ёпрст
 
9 - 06.04.21 - 12:29
И если нет доков, то тут проблема не в проводках, а в 1сджоурнал
   Ёпрст
 
10 - 06.04.21 - 12:30
Для начала, удалить все cdx и зайти монопольно. Проверить наличие доков
   vin1c
 
11 - 06.04.21 - 13:35
Разве переиндексация не это делает?
   vin1c
 
12 - 06.04.21 - 13:40
(2) Я заметил одну не хорошую фишку в 1SENTRY.DBF 21год не в конце дбф в просмотрищике показывает а во второй части таблицы
   vin1c
 
13 - 06.04.21 - 14:07
(10) Помогло!!! Я искал сложности. А не ужели переиндексация по новой не создает индексы.
   vin1c
 
14 - 06.04.21 - 14:07
Могу даже денег кинуть за помощь на карту
   vin1c
 
15 - 06.04.21 - 14:15
(8) что за заплатка? размер дбф больше 2хгб может быть?
   Ёпрст
 
16 - 06.04.21 - 14:21
   Ёпрст
 
17 - 06.04.21 - 14:21
Больше 2-х не может, после 1 гб идёт ошибка по чтению в не монопольном режиме.
   mikecool
 
18 - 06.04.21 - 14:26
(13) в свою эпоху 77 в любой непонятной ситуации всегда делал (10) 99% непонятных проблем уходила )
   VladZ
 
19 - 06.04.21 - 18:51
(7) Значит клиенту нужно сделать предложение, от которого невозможно отказаться.
   tgu82
 
20 - 06.04.21 - 20:02
(19) И что это может быть за предложение? )
   Злопчинский
 
21 - 06.04.21 - 22:48
а еще естькакие-то приблуды, которые файло позволяют до 4 Гб держать (вроде вирт?)
   Ёпрст
 
22 - 06.04.21 - 23:10
(21) там свой формат базы будет
   victuan1
 
23 - 07.04.21 - 05:05
(22) Да, вот у меня есть одна нестандартная база - по размеру нескольких dbf подходит к 2 Гигам (RA***.dbf и RG****.dbf). Перевести ее на "вирт" или писать свою процедуру свертки базы?
Это не ТИС и не Бух, а 1С Предприниматель 7.7 переписанная, она на регистрах. Но что-то штатную обработку свертки для нее я не нашел.
Да и сворачивать не особо ее хочется, т.к. расчет она не быстро и возможно скоро станет не нужна (мегабайт через 500-1000) и ее выкинут на помойку.
Также у меня по ней ежеквартально используется обработка, которая использует данные за весь период существования базы, а после свертки придется еще и эту обработку переделывать - геморойно очень.
   victuan1
 
24 - 07.04.21 - 05:07
(23) Эта база по сути "однопользовательская", я ее использую монопольно, чтобы обойти ошибку 1 гига по чтению, поэтому Kernel3x не использую.
   Ёпрст
 
25 - 07.04.21 - 10:53
(23) просто, для начала, кастрируй числовые ресурсы в регистре. 15.2 переведи в 8.2, например, или еще меньше, тупо найдя макс число в нем+ порядок на запас
   Ёпрст
 
26 - 07.04.21 - 10:55
Все это делать ручками, тип поля любым дбф редактором, мд-ник на пустышке, или перенести таблички регистра куда то, на пустых табличках реструктуризация и готовые подсунуть потом
   tgu82
 
27 - 07.04.21 - 15:55
(26) Хотел убрать измерение на фиг ненужное из регистра партий но в резульатте уменьшил его разрядность до 4.2 и на этом успокоился пока что. теперь буду по использующимся ресурсам уменьшать напрямую через редактор дбф
   victuan1
 
28 - 08.04.21 - 17:05
(26) А почему штатно через конфигуратор нельзя изменить размеры ресурсов и пусть лопатит?
   Ёпрст
 
29 - 08.04.21 - 17:24
(28) если есть много, даже не так, если есть оооооочень много свободного времени, делай штатно. Только учти, что на больших (с точки зрения дбф) файлов, штатной реструктуризации ты можешь и не дождаться.
   Djelf
 
30 - 08.04.21 - 17:24
(28) У себя можно. У заказчика долго. Хотя... если заказчик платит почасовую оплату то нужно так делать и у заказчика ;)
 
 Рекламное место пустует
   victuan1
 
31 - 08.04.21 - 17:28
(30) Это моя вспомогательная база для моих нужд расчета налогов. Ей пользуюсь раз в квартал, два месяца подряд четыре раза в год эта база стоит в простое %)
   Ёпрст
 
32 - 08.04.21 - 17:31
(31) это не важно, ты просто можешь не дождаться реструктуризации, совсем
   Djelf
 
33 - 08.04.21 - 17:39
Запустить вечерком и проверить утром. А если за часов 10 не смогло, то только как Ёпрст советует.
   hogik
 
34 - 09.04.21 - 00:25
Рекомендую посмотреть: https://infostart.ru/1c/articles/77617/
«Ошибка "CodeBase Error #: -310" в DBFной версии 1С:Предприятие 7.7»
Ошибка возникает при непосредственном удалении записи (в терминах 1С) в таблице с количеством записей более 16777215 штук.
   victuan1
 
35 - 09.04.21 - 06:58
(34) Спасибо, вроде такой ошибки не возникало у меня, но я проверю таблицы на кол-во записей.
   victuan1
 
36 - 09.04.21 - 07:49
(34) Проверил - в самых больших таблицах такое кол-во записей:
1) 9 782 325
2) 7 829 369
3) 5 452 264
4) 2 679 319
   victuan1
 
37 - 09.04.21 - 07:50
(25) А какой утилитой найти макс. число. С ДБФ-вьюерами нет опыта. В утилите "Advantage Data Architect" не нашел как?
   Djelf
 
38 - 09.04.21 - 08:07
(37) Прямым запросом
SELECT max(Количество) FROM РегистрИтоги_Продажи

   victuan1
 
39 - 09.04.21 - 08:10
Нашел чем.
В принципе думаю, можно 15.2 смело уменьшать до 11.2
   victuan1
 
40 - 09.04.21 - 08:11
это 99 999 999.99
   Андрей_Андреич
 
41 - 09.04.21 - 08:13
(40) Не надеешься добить до ста миллионов?
   victuan1
 
42 - 09.04.21 - 08:53
(41) Это ведь сумма одной сделки. Нет, не надеюсь.
   Ёпрст
 
43 - 09.04.21 - 09:03
(39) минимум, на порядок (лучше на 2) делать больше.
Еслии пользуешься чёрим запросом, то при вычислении функции можешь нарваться на переполнения разряда.
   Ёпрст
 
44 - 09.04.21 - 09:03
Ибо она результат выполнения приводит к точности ииразрчду первого операнда в выражении.
   victuan1
 
45 - 09.04.21 - 09:07
(43) Это на порядок больше.
   Ёпрст
 
46 - 09.04.21 - 09:11
(45) запас, если много больших чисел складывать будешь
   Ёпрст
 
47 - 09.04.21 - 09:14
Хотя, можешь и по максимуму обрезать. А если втотчете или еще где, увидишь девятки, ну, отчетиперепишешь на прямой и там каст
   victuan1
 
48 - 09.04.21 - 09:15
(47) Пока статистику собираю... по макс. числам в этих дбф, может для разных колонок сделаю разные ограничения. Там еже для Кол-во есть типа 15.3
   Ёпрст
 
49 - 09.04.21 - 09:17
(48) количество да, если не используется дробное, то сделать целым.
   victuan1
 
50 - 09.04.21 - 09:18
(49) Используется дробное (кг)
   victuan1
 
51 - 09.04.21 - 09:18
А вот как узнать, до какой части дроби есть значения в дбф? до десятой, сотой или тысячной?
   Djelf
 
52 - 09.04.21 - 09:19
(43) Это у фокса так? У 1sqlite не режется, даже если явно типизировать как Число.2.0
   Ёпрст
 
53 - 09.04.21 - 09:19
Если примерно типовая, то регистры можно много чего порезать, помимо числовых ресурсов..и не используемыеиреквизиты/измерения..и измерения, которые можно получить из других(договор-клиентос) и.т.п
   victuan1
 
54 - 09.04.21 - 09:21
(26) А как делать?
1) 1cv7.md и 1cv7.dd переношу в другую пустую папку, и в ней конфигуратором обрезаю длину реквизитов.
2) синхронно обрезаю дбф-ки редактором в рабочей базе
3) Тупо копирую 1cv7.md и 1cv7.dd из пустой базы в рабочую с заменой сущ. файлов.
4) грохаю cdx в рабочей базе
5) Запускаю монопольно для переиндексации
6) Профит.
   Ёпрст
 
55 - 09.04.21 - 09:21
(52) это в чорном запросе, в фоксе не помню, проверить не сложно. Хотя мкуль, на сколько помню, тоже результат функции приводит к точности первоно операнда
   Ёпрст
 
56 - 09.04.21 - 09:22
(54) да. На пустышке быстрее всего
   victuan1
 
57 - 09.04.21 - 09:22
(53) Да, почти типовая. Можно и строковые реквизиты поскоращать по идее.
   Ёпрст
 
58 - 09.04.21 - 09:24
Для начала, просто скопируй табличку регистра, дбф редактором измени структуру, и не забудь сжать файлик. И оценишь сразу размер.
   Ёпрст
 
59 - 09.04.21 - 09:27
Ну и в регистрах, очистить еще "нулевые" итоги, там, где все ресурсы по нулям. Тоже похудеет прилично
   victuan1
 
60 - 09.04.21 - 09:43
(59) Так, это запросом надо. Тут я не справлюсь.
 
 Рекламное место пустует
   Ёпрст
 
61 - 09.04.21 - 09:54
(60) там примитивный запрос, даже Чебур справился
https://infostart.ru/public/180018/
   Ёпрст
 
62 - 09.04.21 - 09:56
Процедура Сформировать()

Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Exclusive=Yes;Mode=ReadWrite;Collating Sequence=MACHINE";
ДБ = СоздатьОбъект("OLEDBData");
Рез = ДБ.Соединение(Соединение);
Запрос = ДБ.СоздатьКоманду();
Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')");
Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')");

Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')")// Отключили блокировки

Запрос = ДБ.СоздатьКоманду();

Имя = ИмяРегистра.ПолучитьЗначение(ИмяРегистра.ТекущаяСт рока());

стр ="
|DELETE
|FROM $РегистрИтоги."+Имя+"
|WHERE ";

т="";
Для к= 1 По Метаданные.Регистр(Имя).Ресурс() Цикл
ИмяРесурса = Метаданные.Регистр(Имя).Ресурс(к);
т=т+"
|$РегистрИтоги."+Имя+"."+ИмяРесурса+" =0 and
|";
КонецЦикла;
т=т+"1=1";
стр=стр+т;
Запрос.ВыполнитьИнструкцию(стр);

КонецПроцедуры
   Djelf
 
63 - 09.04.21 - 10:22
(51) Для 1sqlite, размерность поля Количество 12.3, printf`ом печатаем число в строку с точностью 3, отрезаем последний символ и проверяем на '0'.
Ха! 13 кривых документов нашел, коробки дробные были, но делились не на цело.
SELECT DISTINCT
    ОстаткиТМЦ.IDDOCDEF||ОстаткиТМЦ.IDDOC [Документ :Документ]
    ,Количество [Количество :Число.12.3]
FROM Регистр_ОстаткиТМЦ AS ОстаткиТМЦ
GROUP BY ОстаткиТМЦ.RowID
HAVING substr(printf('%.3f',Количество),-1,1) != '0'

   tgu82
 
64 - 09.04.21 - 13:05
Епрст! А почему в словаре размерность 16.2 а в дбф-файле 15.2?
   Ёпрст
 
65 - 09.04.21 - 15:35
(64) Подменяли мд в базе. Пересоздай словарик, будет как в мд
   Гость из Мариуполя
 
66 - 09.04.21 - 18:16
(12) >>Я заметил одну не хорошую фишку в 1SENTRY.DBF 21год не в конце дбф в просмотрищике показывает а во второй части таблицы

Ты просто не в теме :)
Наоборот, это супер классная фишка, из серии - гринпис, зеленые и берегите природу, мать вашу.
называется - повторное использование использованных..кхм.. ресурсов... (чуть не написал непотребное).

1с-ка не пишет тупо новые строки в конец файла, а использует повторно помеченные на удаление (в ФАЙЛЕ dbf! помеченные, а не в 1С) записи.  
Таким образом, файл не распухает, если, конечно, в файле есть помеченные на удаление записи.
Так что твой 2021 год мог оказаться в любом месте файла.
А ты говоришь - нехорошая фишка. Эта нехорошая фишка еще со времен досовского фокспро.

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

Ну тут - или файл пухнет и все новые строки пишутся в конец файла или - гринпси и зеленая технология :) - то бишь мусор (помеченные на удаление записи)_ используем повторно.
   victuan1
 
67 - 11.04.21 - 09:02
(25) Ужал таким образом самую большую таблицу. Была 1 722 Мб, стала 1 494 Мб.
На 3 месяца отсрочил неизбежное... Маловато будет)
   victuan1
 
68 - 11.04.21 - 10:24
На год-полтора должно хватить, если размер самого большого файла не будет расти больше 80 МБ в квартал.
   victuan1
 
69 - 11.04.21 - 10:27
А потом можно будет еще выкроить, если совсем из таблиц удалить колонку СуммаНП (придется переписать код, где она встречается).
Сейчас ее я уменьшил до размера "Число.2.0" (в таблице dbf), меньше не могу, т.к в 1С это отображается как "Число.1.0", и меньше единицы (т.е. Число.0.0) сделать 1с-ка не дает.
   victuan1
 
70 - 11.04.21 - 10:29
(62) еще не пробовал.
   Злопчинский
 
71 - 11.04.21 - 11:27
"Содержание операции" урезал?
   victuan1
 
72 - 11.04.21 - 13:12
(71) Это не мне... У меня регистры.
   victuan1
 
73 - 11.04.21 - 13:50
(65) Нифига, это багофича платформы 1С 7.7, в 1С показывает на 1 меньше размерность именно для регистров.
А размерность реквизитов в справочниках и документах норм. совпадает с дбф.
Косяк этот только с регистрами. ХЗ зачем так сделали разработчики. По этой причине нельзя в Регистре сделать размерность Число.1.0 (в посте (69) описывал).
   victuan1
 
74 - 11.04.21 - 15:45
(62) Запустил удаление нулевых записей - особо ничего не дало:

Регистр Амортизация содержит нулевых записей: 0, что составляет 0% от всех записей в таблице
Регистр Расходы содержит нулевых записей: 5178, что составляет 0.1% от всех записей в таблице
Регистр Касса содержит нулевых записей: 0, что составляет 0% от всех записей в таблице
Регистр Банк содержит нулевых записей: 0, что составляет 0% от всех записей в таблице
Регистр РасчетыСПоставщиками содержит нулевых записей: 4864, что составляет 1.3% от всех записей в таблице
Регистр РасчетыСПокупателями содержит нулевых записей: 3433, что составляет 0.5% от всех записей в таблице
Регистр КнигаПокупок содержит нулевых записей: 1320, что составляет 14.8% от всех записей в таблице
Регистр КнигаПродаж содержит нулевых записей: 1222, что составляет 1% от всех записей в таблице
Регистр РасчетыПоОплатеТруда содержит нулевых записей: 2, что составляет 0% от всех записей в таблице
Регистр ОстаткиТМЦ содержит нулевых записей: 27, что составляет 0% от всех записей в таблице
Регистр РасчетыСБюджетом содержит нулевых записей: 99, что составляет 4.1% от всех записей в таблице
Регистр Подотчетники содержит нулевых записей: 14, что составляет 0.1% от всех записей в таблице
Регистр Удержано содержит нулевых записей: 0, что составляет 0% от всех записей в таблице
БД содержит нулевых записей: 16159, что составляет 0.2% от всех записей в БД
Время работы модуля: 227.56 сек.
   victuan1
 
75 - 11.04.21 - 15:56
(74) Вот этой обработкой https://infostart.ru/public/976426/
Т.к. код из (62) выдал мне ошибку:

Запрос.ВыполнитьИнструкцию(стр);
{X:\BASE1C\TEMP\_ОБРАБОТКИ\тест.ERT(30)}: Meta name parser error: поле таблицы не найдено "$РегистрИтоги.РасчетыСПоставщиками.Задолженность"

Ресурса (измерения, реквизита) с именем "Задолженность" нет в этом регистре. Непонятно откуда его взял мета нэйм парсер...
   victuan1
 
76 - 11.04.21 - 15:57
(75) Ясно, он по синониму взял, идентификатор ресурса = "Сумма".
И что с этим делать?
   victuan1
 
77 - 11.04.21 - 16:00
(76) Убрал синонимы в конфигураторе. Теперь другая ошибка:
Запрос.ВыполнитьИнструкцию(стр);
{X:\BASE1C\TEMP\_ОБРАБОТКИ\тест.ERT(30)}: FAILED! ICommandText::Execute(): Cannot open file x:\base1c\temp\1sbmdb_2011\rg1085.dbf.
   victuan1
 
78 - 11.04.21 - 18:35
(77) Ясно, не монопольно нужно.
   victuan1
 
79 - 11.04.21 - 18:45
Короче, удалением нулевых записей в самом большем регистре я выиграл 1 Мб ;))
   Злопчинский
 
80 - 11.04.21 - 18:46
(79) значит нормально по закрытым реистрам


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.