Вход | Регистрация


1С:Предприятие ::

Метки: 

Странная ошибка при работе с ДБФ

Я
   ЧессМастер
 
05.07.18 - 17:16
Всем доброе время суток !

Столкнулся со странной ошибкой при работе с ДБФ.

При попытке программной переиндексации средствами 1С выдает ошибку
Error #: -20
Creating File
Temporary Working File

При этом сам файл ДБФ прекрасно открывается ДБФ редактором.
В файле 225 500 записей.

Кто сталкивался с подобной ошибкой - в чем может быть дело ?
 
 
   hogik
 
1 - 05.07.18 - 17:47
Надо бы глянуть текст программы. :-)
А вообще:
-20
Creating File
This error could be caused by specifying an illegal file name, attempting to create a file which is open, having a full directory, or by having a disk problem.
   ЧессМастер
 
2 - 05.07.18 - 18:29
(1) В тексте программы ничего необычного
Состояние("Ждите. Идет переиндексация файла таблицы соответствия ...");

Попытка 
БД_ТС.Переиндексировать();

Исключение
  Сообщить("ВНИМАНИЕ! Не удалось переиндексировать 
  таблицу соответствия: " + ИмяФайлаТС + "
                     |    " + 
 ОписаниеОшибки(), СтатусСообщения.ОченьВажное);

КонецПопытки;    


Ошибка возникает при разных именах файлов, разных каталогах и разных компьютерах.

Может проблема в том что при создании индекса не нравится содержимое поля записи ? Но ведь редактором файл открывается.
   hogik
 
3 - 05.07.18 - 20:30
Покажите текст про создание БД_ТС.
   Lama12
 
4 - 05.07.18 - 20:46
(0) Имя файла должно быть в формате 8.3 и желательно английскими буквами.
   Lama12
 
5 - 05.07.18 - 20:47
(4) 8.3 это не версия 1с.
   DES
 
6 - 05.07.18 - 20:54
имена полей (индексируемых) должны быть в верхнем регистре
   ice777
 
7 - 05.07.18 - 21:04
(0) индексный файл и дбф это два разные файлы, если что )
первый только ключи для поиска, второй- данные, которые у тебя "прекрасно открываются".

по тексту ошибки нет места на диске для индексного
   ice777
 
8 - 05.07.18 - 21:06
по жизни видал ситуации, когда индексный больше файла с данными, в выражение для поиска можно было включать и функции. Да и вообще- индексный- это дерево.
   ЧессМастер
 
9 - 06.07.18 - 09:33
(4) Имя файла ts.dbf
Имя индексного файла ts.cdx
   ЧессМастер
 
10 - 06.07.18 - 09:41
(3)

код создания ДБФ

    БД_ТС = Новый XBase;
    ФайлБД_ТС = Новый Файл(ФайлТС);
    ФайлИндексовБД_ТС = Новый Файл(ИмяФайлаИндексовТС);
    Если ФайлБД_ТС.Существует() Тогда
        Если НЕ БД_ТС.Открыта() Тогда            
    
        БД_ТС.индексы.Добавить("IndSource", "TRIM(ID_Source)", Истина);
                    
            Если ФайлИндексовБД_ТС.Существует() Тогда
                БД_ТС.ОткрытьФайл(ФайлТС, ИмяФайлаИндексовТС, Ложь);
            Иначе
                БД_ТС.ОткрытьФайл(ФайлТС,, Ложь);
                Если НЕ БД_ТС.СоздатьИндексныйФайл(ИмяФайлаИндексовТС) Тогда
                    Сообщить("ВНИМАНИЕ! Не удачная попытка создания индексного файла таблицы соответствия:
                             |    " + ИмяФайлаИндексовТС, СтатусСообщения.ОченьВажное);
                    Возврат Ложь;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;        
    
    Иначе
        БД_ТС.поля.Добавить("ID_Source",  "S", 50);
        БД_ТС.поля.Добавить("ID_Receive", "S", 50);
        БД_ТС.поля.Добавить("Manager",    "S", 100);
        БД_ТС.поля.Добавить("DateAct",    "D", 8);
        БД_ТС.поля.Добавить("File",       "S", 20);
        БД_ТС.поля.Добавить("Update",        "N", 2);
        БД_ТС.поля.Добавить("Direct",        "N", 2);
        БД_ТС.поля.Добавить("ManagerRar",        "S", 100);     
        БД_ТС.индексы.Добавить("IndSource", "TRIM(ID_Source)", Истина);
                
        Попытка БД_ТС.СоздатьФайл(ФайлТС, ИмяФайлаИндексовТС);
        Исключение
            Сообщить("ВНИМАНИЕ! Нет возможности открыть файл таблицы соответствия: " + ФайлТС + "
                     |    " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);

            Возврат Ложь;
        КонецПопытки;    
    КонецЕсли;


 
 
   ЧессМастер
 
11 - 06.07.18 - 09:48
(7) "(0) индексный файл и дбф это два разные файлы, если что )
первый только ключи для поиска, второй- данные, которые у тебя "прекрасно открываются". "

Я это знаю.

У меня в файле ДБФ 225 500 записей (225 ТЫСЯЧ).ЮБез индексного файла поиск записей будет долго идти.


Вопрос почему стала возникать ошибка при переиндексации если места на диске полно, в названии файла все нормально, и ошибка возникает именно с этим файлом на разных компах.
   ЧессМастер
 
12 - 06.07.18 - 09:50
(8) "по жизни видал ситуации, когда индексный больше файла с данными"

Файл ДБФ чуть больше 73 Мб, файл индекса (при переиндексации он создается и дорастает до определенного размера а потом выскакивает ошибка в (0) - 18 Мб
   ЧессМастер
 
13 - 06.07.18 - 11:09
Какая то реально странность.

В каталоге оставляю только файл ДБФ. CDX удаляю.

Делаю переиндексацию.

Выскакивает ошибка

"Ошибка при вызове метода контекста (Переиндексировать): ошибка создания файла"

При этом в каталоге где лежит ДБФ появляется файл CDX (до переиндексации его не было).


Как может быть ошибка "ошибка создания файла" если файл CDX создается ?
   olegves
 
14 - 06.07.18 - 12:29
не знаю как в 8ке, но в клюшках помнится заголовок файла CDX, сформированного 1С, отличался от заголовка такого же в FoxPro. При этом Лис принимал 1Ский файл, но не мог по нему производить поиск.
   olegves
 
15 - 06.07.18 - 12:35
+ (14) как вариант, откажись от индексов в пользу Х+1 дбф. 1 - главная, там сделай имя таблицы (всего их будет Х). поиск будет в 2 таблицах:  в Главной по ключевому полю находишь имя таблицы, в которой продолжишь поиск
   ЧессМастер
 
16 - 06.07.18 - 13:07
(15) Вопрос решился.

Индекс убивался конструкцией БД_ТС.Сжать();


Всем спасибо за помощь !
   hogik
 
17 - 06.07.18 - 16:29
(15)

"Индекс убивался конструкцией БД_ТС.Сжать();"(с)
А где этот оператор в тексте, который Вы показываете? :-)

"Вопрос решился."(с)
Не решился. :-)
Вопрос решится после убирания TRIM в индексном выражении.
Т.к. длина ключей в xBase должна быть одинакова для ВСЕХ ключей.
   hogik
 
18 - 06.07.18 - 16:38
(16)

"Индекс убивался конструкцией БД_ТС.Сжать();"(с)
А где этот оператор в тексте, который Вы показываете? :-)

"Вопрос решился."(с)
Не решился. :-)
Вопрос решится после убирания TRIM в индексном выражении.
Т.к. длина ключей в xBase должна быть одинакова для ВСЕХ ключей.
   hogik
 
19 - 06.07.18 - 19:38
(16)
Поясню своё предыдущее сообщение в данной теме.
Есть странная ;-) информация, что "FoxPro не поддерживает переменную длину индексного ключа. Если вы попытаетесь построить индекс с ключом, который имеет различные длины, то ключ будет дополнен пробелами."(с) Например, тут: http://www.foxclub.ru/rhproject/project/html/576a2953-04ff-4a66-9e38-3a3d9c990b72.hhtm
Но, движок из 1С для поддержки DBF не делает этого. Ну, до какой длины надо дополнять пробелы? :-) И возникает ошибка или строится "битый" индекс. Это очень старая ошибка в движке...
   hogik
 
20 - 06.07.18 - 21:36
   Злопчинский
 
21 - 18.07.18 - 03:26
(16) тебе hogik дал реальную причину сбоя
Но реакции - нету.
Проблема решена?



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