1. Azgerd 13.03.19 13:46 Сейчас в теме

Ошибка при открытии файла DBF

Здравствуйте!
В конфигурации на платформе 8.2 Во внешней обработке (обычная форма) есть код:

БДШ = Новый XBase;
БДШ.ОтображатьУдаленные = Ложь;
БДШ.Кодировка = КодировкаXBase.ANSI ;
FSO = Новый COMObject("Scripting.FileSystemObject");
КаталогБД = ЭлементМассива.Путь;
ПутьБДШ = ЭлементМассива.ПолноеИмя;
БДШ.ОткрытьФайл(fso.GetFile(ПутьБДШ).ShortPath,,0);

Название файла DBF в (ПутьБДШ) имеет больше 8 символов типа 000001000005000.dbf. Вопрос: у одних клиентов этот файл открывается нормально, у других тот же самый файл не открывается, выдаёт ошибку:
ВнешняяОбработка.sh81_prih.Форма.Форма.Форма(770)}: Ошибка при вызове метода контекста (ОткрытьФайл)
БДШ.ОткрытьФайл(fso.GetFile(ПутьБДШ).ShortPath,,0);
по причине:
Длина имени файла превысила 8 символов.
Почему у одних клиентов с одной и той же конфигурацией система съедает длиный файл а у других нет?
Ответы
Избранное Подписка Сортировка: Древо
3. dim_1c 13.03.19 14:08 Сейчас в теме
(1)
Почему у одних клиентов с одной и той же конфигурацией система съедает длиный файл а у других нет?
Съедает ли? В синтакс-помощнике четко сказано:
XBase - основной объект для работы с таблицами баз данных в формате DBF. Предоставляет доступ к коллекции полей и индексов таблицы, позволяет открывать и записывать файлы таблиц, работать с записями таблицы.
При работе с файлами DBF следует иметь в виду, что имя файла должно удовлетворять ограничению 8.3.
5. Denis_CFO 21 13.03.19 14:32 Сейчас в теме
7. Vitaly1C8 13.03.19 17:43 Сейчас в теме
(1)
.ShortPath

Очевидно надо использовать что-то типа .FullPath
Иначе БДШ.ОткрытьФайл( будет искать его в каком то каталоге по-умолчанию )
8. alxarz 29 13.03.19 18:37 Сейчас в теме
(1) а файл этот в одном и том же каталоге на одном и том же диске лежит у разных клиентов? Может в имени папок у одного есть кириллица/пробелы, а у другого нет?
2. Timur.V 44 13.03.19 14:01 Сейчас в теме
Во время написания обработки чтения dbf файла столкнулся с проблемой: длина имени файла больше 8-ми символов. Вот так решил проблему:
Код 1C v 8.х
 Процедура ПрочитатьФайлНажатие(Элемент)
    //Получаем объект Файл
    НашФайл = Новый Файл(ИмяФайла);

    //Получаем первые 8-мь симовол имени нашего исходного файла
    НашеИмяФайла = Лев(НашФайл.ИмяБезРасширения,8)+".dbf";

    //Копируем наш исходный файл во временный каталог с нормальным именем
    НашПолныйПутьФайла = КаталогВременныхФайлов()+НашеИмяФайла;
    КопироватьФайл(ИмяФайла,НашПолныйПутьФайла);

    //Работа с dbf файлом
    ФайлДБФ = Новый XBase;
    ФайлДБФ.Кодировка = КодировкаXBase.OEM;
    ФайлДБФ.ОткрытьФайл(НашПолныйПутьФайла);
    ФайлДБФ.Первая();

    Пока Не ФайлДБФ.ВКонце() Цикл
        НомерЗаказаКонтрагента = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("MSG"));
        СуммаВФайле = СокрЛП(ФайлДБФ.ПолучитьЗначениеПоля("PAYSUM"));

        //Обрабатываем запись dbf файла

        ФайлДБФ.Следующая();
    КонецЦикла;

    ФайлДБФ.ЗакрытьФайл();
КонецПроцедуры   
Показать

https://helpf.pro/faq/view/912.html
4. Azgerd 13.03.19 14:16 Сейчас в теме
(2) Спасибо! Но все же хотелось бы разобраться, почему у одних открывается у других нет...
6. protexprotex 164 13.03.19 16:43 Сейчас в теме
(4) Добрый день. Существуют ограничения на длину имени файла и на длину пути. Абсолютное ограничение длины имени файла вместе включая путь к нему равно 260 символам. Этот предел называют термином MAX_PATH. На самом же деле на практике пределы для имен еще меньше из-за ряда других ограничений. Например, каждая строка на конце должна содержать так называемый нулевой символ, который обозначает конец строки. Несмотря на то, что маркер конца строки не отображается, он учитывается как отдельный символ при подсчете длины, а значит остается 259 символов доступных для имени файла и пути к нему.
Так что надо посмотреть - у кого не открывает - может, длина путь+Имя файла > 260?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Ведущий инженер - программист 1С
Москва
зарплата от 200 000 руб.
Полный день

Ведущий программист 1С
Нижний Новгород
зарплата от 100 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день