Название файла DBF в (ПутьБДШ) имеет больше 8 символов типа 000001000005000.dbf. Вопрос: у одних клиентов этот файл открывается нормально, у других тот же самый файл не открывается, выдаёт ошибку:
ВнешняяОбработка.sh81_prih.Форма.Форма.Форма(770)}: Ошибка при вызове метода контекста (ОткрытьФайл)
БДШ.ОткрытьФайл(fso.GetFile(ПутьБДШ).ShortPath,,0);
по причине:
Длина имени файла превысила 8 символов.
Почему у одних клиентов с одной и той же конфигурацией система съедает длиный файл а у других нет?
Почему у одних клиентов с одной и той же конфигурацией система съедает длиный файл а у других нет?
Съедает ли? В синтакс-помощнике четко сказано:
XBase - основной объект для работы с таблицами баз данных в формате DBF. Предоставляет доступ к коллекции полей и индексов таблицы, позволяет открывать и записывать файлы таблиц, работать с записями таблицы.
При работе с файлами DBF следует иметь в виду, что имя файла должно удовлетворять ограничению 8.3.
(1) а файл этот в одном и том же каталоге на одном и том же диске лежит у разных клиентов? Может в имени папок у одного есть кириллица/пробелы, а у другого нет?
Во время написания обработки чтения dbf файла столкнулся с проблемой: длина имени файла больше 8-ми символов. Вот так решил проблему:
Код 1C v 8.х
Процедура ПрочитатьФайлНажатие(Элемент)
//Получаем объект Файл
НашФайл = Новый Файл(ИмяФайла);
//Получаем первые 8-мь симовол имени нашего исходного файла
НашеИмяФайла = Лев(НашФайл.ИмяБезРасширения,8)+".dbf";
//Копируем наш исходный файл во временный каталог с нормальным именем
НашПолныйПутьФайла = КаталогВременныхФайлов()+НашеИмяФайла;
КопироватьФайл(ИмяФайла,НашПолныйПутьФайла);
//Работа с dbf файлом
ФайлДБФ = Новый XBase;
ФайлДБФ.Кодировка = КодировкаXBase.OEM;
ФайлДБФ.ОткрытьФайл(НашПолныйПутьФайла);
ФайлДБФ.Первая();
Пока Не ФайлДБФ.ВКонце() Цикл
НомерЗаказаКонтрагента = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("MSG"));
СуммаВФайле = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("PAYSUM"));
//Обрабатываем запись dbf файла
ФайлДБФ.Следующая();
КонецЦикла;
ФайлДБФ.ЗакрытьФайл();
КонецПроцедуры
(4) Добрый день. Существуют ограничения на длину имени файла и на длину пути. Абсолютное ограничение длины имени файла вместе включая путь к нему равно 260 символам. Этот предел называют термином MAX_PATH. На самом же деле на практике пределы для имен еще меньше из-за ряда других ограничений. Например, каждая строка на конце должна содержать так называемый нулевой символ, который обозначает конец строки. Несмотря на то, что маркер конца строки не отображается, он учитывается как отдельный символ при подсчете длины, а значит остается 259 символов доступных для имени файла и пути к нему.
Так что надо посмотреть - у кого не открывает - может, длина путь+Имя файла > 260?