|
Ошибка при работе с DBF, xbase, cdx | ☑ | ||
---|---|---|---|---|
0
assest
17.02.16
✎
15:42
|
Есть файл соответствия .DBF и индексы в .cdx.
Есть цикл ВКонцеТС = БД_ТС.ВКонце(); Пока НЕ ВКонцеТС Цикл ТекущееИмяМенеджера = СокрЛП(БД_ТС.Manager); ТекущийИсточник = СокрЛП(БД_ТС.ID_Source); ТекущийПриемник = СокрЛП(БД_ТС.ID_Receive); Если МетаданныеДокументы.Найти(ТекущееИмяМенеджера)<>Неопределено Тогда НоваяСтрокаТС = ВременнаяТС.Добавить(); НоваяСтрокаТС.ИмяМенеджера = ТекущееИмяМенеджера; НоваяСтрокаТС.Источник = ТекущийИсточник; НоваяСтрокаТС.Приемник = ТекущийПриемник; Состояние("Просмотр таблицы соответствий: запись "+Строка(СчетчикСоответствий)+" из "+Строка(ВсегоСоответствий)); КонецЕсли; БД_ТС.Следующая(); ВКонцеТС = БД_ТС.ВКонце(); СчетчикСоответствий = СчетчикСоответствий + 1; КонецЦикла; |
|||
1
assest
17.02.16
✎
15:44
|
На итерации 4110 строка БД_ТС.Следующая(); перестает работать, не переходит к следующей строке xBase, цикл становется бесконечным
|
|||
2
vde69
17.02.16
✎
15:44
|
1. в какой строке ошибка
2. описание ошибки |
|||
3
Ёпрст
17.02.16
✎
15:45
|
Продолжайте наблюдение
|
|||
4
assest
17.02.16
✎
15:45
|
Ошибки нет, просто цикл уходит в бесконечность (2)
|
|||
5
Garykom
гуру
17.02.16
✎
15:46
|
(4) а если использвать БД.КоличествоЗаписей() и БД.Перейти(НомерЗаписи) ?
|
|||
6
vde69
17.02.16
✎
15:47
|
ВКонцеТС = БД_ТС.ВКонце();
Пока НЕ БД_ТС.EOF() Цикл ТекущееИмяМенеджера = СокрЛП(БД_ТС.Manager); ТекущийИсточник = СокрЛП(БД_ТС.ID_Source); ТекущийПриемник = СокрЛП(БД_ТС.ID_Receive); Если МетаданныеДокументы.Найти(ТекущееИмяМенеджера)<>Неопределено Тогда НоваяСтрокаТС = ВременнаяТС.Добавить(); НоваяСтрокаТС.ИмяМенеджера = ТекущееИмяМенеджера; НоваяСтрокаТС.Источник = ТекущийИсточник; НоваяСтрокаТС.Приемник = ТекущийПриемник; Состояние("Просмотр таблицы соответствий: запись "+Строка(СчетчикСоответствий)+" из "+Строка(ВсегоСоответствий)); КонецЕсли; СчетчикСоответствий = СчетчикСоответствий + 1; БД_ТС.Следующая(); КонецЦикла; |
|||
7
assest
17.02.16
✎
15:47
|
Я открыл файл Excel'ем с таблицей вроде все в порядке, строка 4110 ничем не отличается, если пройти отладкой до этой строки данные меняются, т. е. есть переход к следующей строке, а после данные не меняются
|
|||
8
vde69
17.02.16
✎
15:51
|
точнее так
Пока БД_ТС.ВКонце() = ложь Цикл |
|||
9
assest
17.02.16
✎
15:53
|
(8) (6) Та же ситуация
|
|||
10
assest
17.02.16
✎
15:55
|
Пробовал восстановить файл несколькими программками, все сказали что проблем нет. У Xbase есть метод переиндексировать. он выдает ошибку создания файла, директория без символов, руских букв и пробелов и доступна для записи из 1С
|
|||
11
vde69
17.02.16
✎
15:59
|
тогда что-то в базе не то...
для начала попробуй пройтись по файлу CDBF потом можно попробовать пропатчить реестр [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase] "DataCodePage"="ANSI" "BDE"=dword:00000002 |
|||
12
assest
17.02.16
✎
16:01
|
Дело точно в файле соответствия или в cdx, так как у меня есть старая копия этих файлов и с ними загрузка проходит
|
|||
13
assest
17.02.16
✎
16:02
|
(11) Что за патч реестра?
|
|||
14
vde69
17.02.16
✎
16:05
|
(13) это патч драйвера,
выравнивание границы записи на 2 байта и присвоение кодировки по дефолту... патч позволяет корректно работать со старыми форматами дбф созданных драйверами фокса и 1с |
|||
15
assest
17.02.16
✎
16:07
|
(14) Прости за наглость, можешь перевести (11) в текст батника?
|
|||
16
Mikeware
17.02.16
✎
16:11
|
(15) сохрани в файле с расширением reg, и пкм...
|
|||
17
assest
17.02.16
✎
16:12
|
(5) Идея БД.Перейти(НомерЗаписи) на строке 4110 сработала, но что это было?
|
|||
18
assest
17.02.16
✎
16:12
|
Сейчас попробую реестр
|
|||
19
assest
17.02.16
✎
16:14
|
(16) (14) Могут быть проблемы при добавлении этих записей?
|
|||
20
vde69
17.02.16
✎
16:20
|
(19) на всякий случай сохрани старое из реестра...
на 10 винде не юзал... и еще, изменения вступают в силу после перезагрузки драйвера (гарантировано при перезргрузки компа) |
|||
21
Garykom
гуру
17.02.16
✎
16:23
|
(17) суть вместо цикла с проверкой "на конец файла/последнюю запись" проще использовать позиционирование по номеру записи
это надежнее и проще |
|||
22
assest
17.02.16
✎
16:27
|
Пока Дальше <>Ложь Цикл
Если СчетчикСоответствий < ВсегоСоответствий Тогда СчетчикСоответствий = СчетчикСоответствий + 1; БД_ТС.Перейти(СчетчикСоответствий) Иначе Дальше=Ложь; КонецЕсли; |
|||
23
assest
17.02.16
✎
16:27
|
Сделал так
|
|||
24
Garykom
гуру
17.02.16
✎
16:32
|
(22) как бы не проще
|
|||
25
Vlad_69
17.02.16
✎
16:38
|
И индекс не открывать, раз он все равно битый. А сортировать уже потом ВременнуюТС.
|
|||
26
assest
17.02.16
✎
16:56
|
Вроде все сработало, но что там было не поянтно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |