Имя: Пароль:
1C
 
Работа с Xbase
,
0 Seliga
 
28.05.24
10:41
Столкнулся с проблемой. При закрытии файла xbase происходит вылет с ошибкой "ошибка при выполнении запроса post к ресурсу /e1cib/logform:". То же происходит при попытке удалить файл. При очистке файла ошибок нет. Даже если файл очистить и попытаться закрыть - все равно возникает ошибка. Сталкивался ли кто нибудь с подобным?
1 Fedor-1971
 
28.05.24
10:47
(0) Код открытия и закрытия покажи
2 Seliga
 
28.05.24
11:13
(1) Не понял что имеется ввиду под кодом открытия/закрытия. Если состояние через функцию КодОшибки() то в момент открытия - 0, по закрытию сказать не могу - отладка падает.
3 Fedor-1971
 
28.05.24
11:40
(2) Делаешь, примерно, так:
xB = Новый xBase;
xB.ОткрытьФайл("c:\test.dbf", "c:\test.cdx");
Если xB.Открыта() Тогда
    xB.ЗакрытьФайл();
КонецЕсли;

Проверь, что закрываешь и открываешь в одном местоположении
типа НаКлиенте или НаСервере

Обломайс может получиться при открытии НаКлиенте и попытке закрыть НаСервере (или наоборот)
4 Seliga
 
28.05.24
11:50
Открываю на сервере, закрываю так же на сервере. На момент попытки закрытия Открыта() - Истина
5 Fedor-1971
 
28.05.24
12:07
(4) Закрытие оберни в Попытку Исключение и выведи ОписаниеОшибки - будет понятно что не так

Попробуй вот такой вариант (с записью во временный каталог сервера):
УдалитьФайлВоВременномКаталоге(ИмяФайла);
ФайлВыгрГотПрод = КаталогВременныхФайлов()+"\"+ИмяФайла;

Файл = Новый XBase;  
Файл.Поля.Добавить("DATADOC","D",10,0);
Файл.Поля.Добавить("NUMDOC","N",5,0);
Файл.Кодировка = КодировкаXBase.OEM;
Файл.СоздатьФайл(ФайлВыгрГотПрод);

Файл.Добавить();
Файл.DATADOC = Дата(2024,05, 20);
Файл.NUMDOC = "1";
Файл.Записать();
Файл.DATADOC = Дата(2024,05, 28);
Файл.NUMDOC = "2";
Файл.Записать();

Попытка
   Файл.ЗакрытьФайл();
Исключение
   Сообщить("Засада по причине: " + ОписаниеОшибки());
КонецПопытки;

и не забудь удалить ФайлВыгрГотПрод
6 vladmenleo
 
28.05.24
12:39
(4) А еще xBase критичен к имени файла - должен быть в формате 8.3
7 Seliga
 
28.05.24
12:47
Собственно закрытие и так в попытке. До исключения не добирается - просто падает с ошибкой "ошибка при выполнении запроса post к ресурсу /e1cib/logform:". Вариант с папкой темп так же не помог. Для сноски - файл не пустой. Читаю уже до этого созданный файл и обрабатываю. При чем заметил закономерность - ошибка вылетает не на каждом файле. Если дело в обьеме - не понимаю логики. Обрабатывается документ верно, вылетает только на закрытии после очистки.
8 Fedor-1971
 
28.05.24
13:01
(7) А если просто открыть, прочитать и закрыть (без очистки) - вывалится или нет? Может индекс перестраивается?
Это, как идея, Открытие - Закрытие происходит в одной функции?

На всякий случай, попробуй почистить кэши, в т.ч. и на сервере (если не помешает работе других пользователей)
9 Seliga
 
28.05.24
13:12
Без очистки все равно падает. С Кэшем попробую вариант.
10 Garykom
 
гуру
28.05.24
17:53
(0) Для начала попробуй этот же код в другой базе
В которой ТиИ точно сделан

Ну и что в коде нет превышения ограничений на длину строк формата dbf
11 MaximSh
 
28.05.24
21:09
(0) а какая версия платформы?
12 Seliga
 
29.05.24
05:15
(11) 8.3.24
13 Seliga
 
29.05.24
05:59
(8) Кеш тоже не помог
14 Seliga
 
29.05.24
06:08
(10) Превышения нет.
15 MaximSh
 
29.05.24
08:05
(12) попробуй на другой, лучше 8.3.22. Уже не раз встречал  на 8.3.24 такое поведение
16 Seliga
 
29.05.24
09:21
(15) Вариант с даунгрейдом платформы точно не получится
17 Seliga
 
29.05.24
09:22
Попробовал так же открывать/закрывать на клиенте. Тогда вылетает молча. Без ошибок и прочего.
18 Garykom
 
гуру
29.05.24
09:23
используй вместо встроенного xbase внешний микросервис
на Golang и https://github.com/Valentin-Kaiser/go-dbase
19 Fedor-1971
 
29.05.24
09:40
(13) тогда похоже на проблему с платформой.
как вариант - смотрим hex редактором количество строк в файле, открываем DBF смотрелкой и сравниваем. Бывает такое, что в середине файла нарушается количество полей в строке и файл либо не открывается, либо падает в процессе работы с ним (возможно, что тупо недописана последняя строка)