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

SELECT max(Количество) FROM РегистрИтоги_Продажи
39 victuan1
 
09.04.21
08:10
Нашел чем.
В принципе думаю, можно 15.2 смело уменьшать до 11.2
40 victuan1
 
09.04.21
08:11
это 99 999 999.99
41 Андрей_Андреич
 
naïve
09.04.21
08:13
(40) Не надеешься добить до ста миллионов?
42 victuan1
 
09.04.21
08:53
(41) Это ведь сумма одной сделки. Нет, не надеюсь.
43 Ёпрст
 
09.04.21
09:03
(39) минимум, на порядок (лучше на 2) делать больше.
Еслии пользуешься чёрим запросом, то при вычислении функции можешь нарваться на переполнения разряда.
44 Ёпрст
 
09.04.21
09:03
Ибо она результат выполнения приводит к точности ииразрчду первого операнда в выражении.
45 victuan1
 
09.04.21
09:07
(43) Это на порядок больше.
46 Ёпрст
 
09.04.21
09:11
(45) запас, если много больших чисел складывать будешь
47 Ёпрст
 
09.04.21
09:14
Хотя, можешь и по максимуму обрезать. А если втотчете или еще где, увидишь девятки, ну, отчетиперепишешь на прямой и там каст
48 victuan1
 
09.04.21
09:15
(47) Пока статистику собираю... по макс. числам в этих дбф, может для разных колонок сделаю разные ограничения. Там еже для Кол-во есть типа 15.3
49 Ёпрст
 
09.04.21
09:17
(48) количество да, если не используется дробное, то сделать целым.
50 victuan1
 
09.04.21
09:18
(49) Используется дробное (кг)
51 victuan1
 
09.04.21
09:18
А вот как узнать, до какой части дроби есть значения в дбф? до десятой, сотой или тысячной?
52 Djelf
 
09.04.21
09:19
(43) Это у фокса так? У 1sqlite не режется, даже если явно типизировать как Число.2.0
53 Ёпрст
 
09.04.21
09:19
Если примерно типовая, то регистры можно много чего порезать, помимо числовых ресурсов..и не используемыеиреквизиты/измерения..и измерения, которые можно получить из других(договор-клиентос) и.т.п
54 victuan1
 
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) да. На пустышке быстрее всего
57 victuan1
 
09.04.21
09:22
(53) Да, почти типовая. Можно и строковые реквизиты поскоращать по идее.
58 Ёпрст
 
09.04.21
09:24
Для начала, просто скопируй табличку регистра, дбф редактором измени структуру, и не забудь сжать файлик. И оценишь сразу размер.
59 Ёпрст
 
09.04.21
09:27
Ну и в регистрах, очистить еще "нулевые" итоги, там, где все ресурсы по нулям. Тоже похудеет прилично
60 victuan1
 
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";
стр=стр+т;
Запрос.ВыполнитьИнструкцию(стр);

КонецПроцедуры
63 Djelf
 
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'
64 tgu82
 
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 год мог оказаться в любом месте файла.
А ты говоришь - нехорошая фишка. Эта нехорошая фишка еще со времен досовского фокспро.

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

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

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

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