Меню

1с ошибка при вызове метода контекста создать файл длина имени файла превысила 8 символов

ДБФ файл. Ругается на длину имени

Я
   Маркусс

02.10.09 — 09:10

Здравствуйте.

Для отчетности требуется создать файл дбф. Структура определена в документации. Наименование должно иметь ИНН, дату и т.д.При попытке создания пишет следующее:

Ошибка при вызове метода контекста (СоздатьФайл): Длина имени файла превысила 8 символов

   БД.СоздатьФайл(ИмяФайла);

по причине:

Длина имени файла превысила 8 символов

В документации указано, что формат должен быть DBF 4. Подскажите, плиз, как прописать в коде данный формат.

ИмяФайла = «c:465465465465461.DBF»;

   БД = Новый XBase;

БД.Поля.Добавить(«SELFKPP», «C», 10);

   БД.Поля.Добавить(«REPORTDATE», «D», 8);

   БД.Поля.Добавить(«EAN13», «C», 13);

   БД.Поля.Добавить(«AMOUNT», «C», 4);

   БД.СоздатьФайл(ИмяФайла);

Спасибо.

   IronDemon

1 — 02.10.09 — 09:11

Не превышай

   dragonIMV

2 — 02.10.09 — 09:12

мне вот тоже это интересно, а то приходится делать файлы с именем не более 8 символов…

   Kolyasik

3 — 02.10.09 — 09:13

465465465465461 — больше восми знаков… наверное поетому :)))

   ДенисЧ

4 — 02.10.09 — 09:13

Напиши так

ИмяФайла = "c:4654.DBF"
тут твой код
КомандаСистемы("ren c:4654.DBF c:465465465465461.DBF");


А потом иди на базар и купи там гУся.
   dragonIMV

5 — 02.10.09 — 09:17

(4) не, это понятно что можно сделать…

а вот существует ли возможность изначально делать файл с именем длинее 8 символов?

   ДенисЧ

6 — 02.10.09 — 09:18

(5) Существует. Не использовать объект XBase, например.

Или не использовать 1с.

Или не использовать компьютер.

Или…

   Kolyasik

7 — 02.10.09 — 09:23

Описание:
XBase — основной объект для работы с таблицами баз данных в формате DBF. Предоставляет доступ к коллекции полей и индексов таблицы, позволяет открывать и записывать файлы таблиц, работать с записями таблицы.
При работе с файлами DBF следует иметь в виду, что имя файла должно удовлетворять ограничению 8.3.

   Kolyasik

8 — 02.10.09 — 09:23

СП рулит

   IKSparrow

9 — 02.10.09 — 09:26

На всякий случай перевожу написанное в (7) — не понимает DBF больше 8 символов в имени файла. И кириллицу не понимает там же. Стандарт такой. Имя должно быть как по старинке в DOS (операционка такая была). FILENAME.DBF. Всё.

   SmallDog

10 — 02.10.09 — 09:28

сначала дать простое имя, потом переименовать как надо — проверено, работает

   dragonIMV

11 — 02.10.09 — 09:31

(9) хорошая была операционка)))) не то что винда…

   Маркусс

12 — 02.10.09 — 09:31

(4)Спасибо. только использовал move

   Lama12

13 — 02.10.09 — 09:32

(12)Потом хрен откроешь пока не переименуешь обратно.

   dragonIMV

14 — 02.10.09 — 09:34

(13)во во, вроде он или не даст открыть такой файл, или вроде бы только первые 8 символов названия будет читать…

   ASU_Diamond

15 — 02.10.09 — 09:45

(9) эээ… а в семерке вроде как понимал…

   Mikeware

16 — 02.10.09 — 09:48

(15) Нет.

  

ДенисЧ

17 — 02.10.09 — 09:48

(15) «ет» (с)

Формат dbf пока ещё встречается в современном IT. Однако, вопреки заветам MS DOS, разработчики, иногда, используют в имени файла более 8 символов.

Объект XBase в 1С8 может оперировать только с файлами, у которых имя соответствует формату 8.3. Поэтому, при попытке открыть dbf-файл с именем длиной более 8 символов, возникает системная ошибка и работа с таким файлом невозможна.

Ниже приведен пример программного кода, в котором показано решение данной проблемы средствами 1С8.

//путь к файлам с данными
ПутьКФайлам="c:";

маскаФайла="*.dbf";
дбф=Новый XBASE;
дбф.Кодировка=КодировкаXBase.ANSI;

найденныеФайлы=НайтиФайлы(ПутьКФайлам, маскаФайла);
Для Каждого файл Из найденныеФайлы Цикл
   Если файл.ЭтоКаталог() Тогда
      Продолжить;
   КонецЕсли;

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

   дбф.ОткрытьФайл(полныйПутьКНовомуФайлу);
   Если дбф.Открыта() Тогда

      //...работа с файлом...

      //закрытие файла
      дбф.ЗакрытьФайл();

      //удаление временного файла с именем 8.3
      УдалитьФайлы(полныйПутьКНовомуФайлу);

   КонецЕсли;

КонецЦикла;

 +2 

   

Распечатать

Во время написания обработки чтения dbf файла столкнулся с проблемой: длина имени файла больше 8-ми символов. Вот так решил проблему:

Код 1C v 8.х

 Процедура ПрочитатьФайлНажатие(Элемент)
//Получаем объект Файл
НашФайл = Новый Файл(ИмяФайла);

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

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

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

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

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

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

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

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

1

1C 8.x

25.12.2013, 21:13. Показов 12204. Ответов 7


Подскажите как бороться с этой ошибкой

ФайлДБФ.ОткрытьФайл(ИмяФайла);
по причине:
Длина имени файла превысила 8 символов

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Модератор

Эксперт 1С

3697 / 2897 / 569

Регистрация: 10.03.2011

Сообщений: 11,398

Записей в блоге: 1

25.12.2013, 21:39

2

переименовать файл что бы имя было меньше 8ми символов



1



4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

25.12.2013, 21:59

 [ТС]

3

Dethmontt, это понятно, а есть способ чтобы загружать более 8 символов?



0



Модератор

Эксперт 1С

3697 / 2897 / 569

Регистрация: 10.03.2011

Сообщений: 11,398

Записей в блоге: 1

25.12.2013, 22:19

4

Это ограничение объекта XBase

Добавлено через 35 секунд

Цитата
Сообщение от Ermak27
Посмотреть сообщение

Dethmontt, это понятно, а есть способ чтобы загружать более 8 символов?

Да, есть! Не использовать XBase

Добавлено через 2 минуты
Ну вот например драйвер ODBC — http://www.connectionstrings.com/dbf-foxpro/



1



4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

25.12.2013, 22:30

 [ТС]

5

Dethmontt, плохо что больше нет вариантов



0



Модератор

Эксперт 1С

3697 / 2897 / 569

Регистрация: 10.03.2011

Сообщений: 11,398

Записей в блоге: 1

25.12.2013, 22:40

6

Чем не подходит ODBC?



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

25.12.2013, 23:15

7

Цитата
Сообщение от Ermak27
Посмотреть сообщение

Dethmontt, плохо что больше нет вариантов

а чем не подходит переименование файла? Его вообще грамотней всего скопировать в тмп-каталог.
Если разовая закачка — открыть в ёкселе и скопипастить в одинэсину в таб док, потом по ячейкам разобрать.



1



Модератор

Эксперт 1С

3697 / 2897 / 569

Регистрация: 10.03.2011

Сообщений: 11,398

Записей в блоге: 1

26.12.2013, 01:19

8

Ermak27

Цитата
Сообщение от duk337
Посмотреть сообщение

а чем не подходит переименование файла? Его вообще грамотней всего скопировать в тмп-каталог.
Если разовая закачка — открыть в ёкселе и скопипастить в одинэсину в таб док, потом по ячейкам разобрать.

Переведу что сказал duk337.
Есть еще один вариант программно находить нужный файл (или по маске) и копировать его со служебным именем в темп, обрабатывать его и удалять.

Добавлено через 3 минуты
Но семершники (1С 7.7) тебе наверное кучу вариантов предложат разбора файла dbf



1



Здравствуйте. Для отчетности требуется создать файл дбф. Структура определена в документации. Наименование должно иметь ИНН, дату и т.д.При попытке создания пишет следующее: Ошибка при вызове метода контекста (СоздатьФайл): Длина имени файла превысила 8 символов    БД.СоздатьФайл(ИмяФайла); по причине: Длина имени файла превысила 8 символов В документации указано, что формат должен быть DBF 4. Подскажите, плиз, как прописать в коде данный формат. Спасибо.

мне вот тоже это интересно, а то приходится делать файлы с именем не более 8 символов…

465465465465461 — больше восми знаков… наверное поетому :)))

ИмяФайла = «c:4654.DBF» тут твой код А потом иди на базар и купи там гУся.

не, это понятно что можно сделать… а вот существует ли возможность изначально делать файл с именем длинее 8 символов?

Существует. Не использовать объект XBase, например. Или не использовать 1с. Или не использовать компьютер. Или…

Описание: XBase — основной объект для работы с таблицами баз данных в формате DBF. Предоставляет доступ к коллекции полей и индексов таблицы, позволяет открывать и записывать файлы таблиц, работать с записями таблицы. При работе с файлами DBF следует иметь в виду, что имя файла должно удовлетворять ограничению 8.3.

На всякий случай перевожу написанное в — не понимает DBF больше 8 символов в имени файла. И кириллицу не понимает там же. Стандарт такой. Имя должно быть как по старинке в DOS (операционка такая была). FILENAME.DBF. Всё.

сначала дать простое имя, потом переименовать как надо — проверено, работает

хорошая была операционка)))) не то что винда…

Спасибо. только использовал move

Потом хрен откроешь пока не переименуешь обратно.

во во, вроде он или не даст открыть такой файл, или вроде бы только первые 8 символов названия будет читать…

эээ… а в семерке вроде как понимал…

Тэги:

Комментарии доступны только авторизированным пользователям

Во время написания обработки чтения dbf файла столкнулся с проблемой: длина имени файла больше 8-ми символов. Вот так решил проблему:

Код 1C v 8.х

 Процедура ПрочитатьФайлНажатие(Элемент)
      
//Получаем объект Файл
НашФайл = Новый Файл(ИмяФайла);

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

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

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

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

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

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

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

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

Для какого банана, извиняюсь, переименовывать?
При длинном пути надо брать либо в кавычки имя файла, либо, ИмяФайла = Лев(ДлинноеИмяФайла,7)+»~.dbf»

Поясню подробней. На диске в различных каталогах находятся файлы dbf с длиной имени порядка 12-14 символов. Если длина имени не превышает 8 символов- файлы открываются нормально, если же больше — программа вылетает с ошибкой «Перед выполнением операции нужно открыть базу!» на строчках
ДБФ.Первая();
и Пока ДБФ.ВКонце() = 0 Цикл

Хотелось бы программно переименовывать длинные имена до 8 символов, обрабатывать данные, а затем возвращать исходное имя файлам. В противном случае остается только вручную переименовывать файлы, что весьма неудобно, ибо их несколько сотен и каждый день появляются новые.

Первоначальная версия процедур:

[codebox]
Процедура ВыборФайла()

КаталогЗагрузки = «»;
ФайлЗагрузки = «»;
Если ФС.ВыбратьФайл(1, ФайлЗагрузки, КаталогЗагрузки, «Выберите файл», «*.dbf|*.dbf», , ) = 1 Тогда
ФайлЗагрузки = КаталогЗагрузки + ФайлЗагрузки;
КонецЕсли;

КонецПроцедуры

Процедура ПриВыбореИмениФайла()
Поз=Найти(ФайлЗагрузки,».»);
Если (Поз=0) Или (Поз>8) Тогда
ФайлЗагрузки=СокрП(Лев(СокрЛ(ФайлЗагрузки),12))+».DBF»;
Иначе
ФайлЗагрузки=СокрЛП(Лев(ФайлЗагрузки,Поз)+»DBF»);
КонецЕсли;
КонецПроцедуры

Процедура Сформировать()

ИмФайл=СокрЛП(ФайлЗагрузки);
Док1 = СоздатьОбъект(«Документ.РеестрСчетовВходящийЛПУ»);
ДБФ = СоздатьОбъект(«XBase»);
ДБФ.ОткрытьФайл(ИмФайл,,1);
Док1.Новый();
ДБФ.Первая();
Пока ДБФ.ВКонце() = 0 Цикл
Док1.НоваяСтрока();
// и т.д.
[/codebox]

Решил сделать возможной загрузку файлов и с длинными именами. Алгоритм следующий:
1) long = 0;
2) пытаемся открыть файл, если длина больше 8 символов Тогда
а) усекаем имя до 8 символов;
б) переименовываем файл на диске в короткое имя;
в) присваиваем переменной long значение 1;
Иначе
ничего не делаем
Далее создаем объект типа XBase, создаем новый документ, открываем наш файл DBF и начинаем заполнять документ значениями полей файла. Если у нас был длинный файл (long=1), то после окончания всех действий вновь переименовываем файл (возвращаем ему исходное имя).

[codebox]
Перем КороткоеИмяФайла,ПолноеИмяФайла;
Процедура ВыборФайла()

КаталогЗагрузки = «»;
ФайлЗагрузки = «»;
Если ФС.ВыбратьФайл(0, ФайлЗагрузки, КаталогЗагрузки, «Выберите файл», «*.dbf|*.dbf», , ) = 1 Тогда
ПолноеИмяФайла = КаталогЗагрузки + ФайлЗагрузки;
КонецЕсли;

КонецПроцедуры

Процедура ПриВыбореИмениФайла()
long=0;
Поз=Найти(ФайлЗагрузки,».»);
Если (Поз>8) Тогда // длинное имя файла
КороткоеИмяФайла=СокрП(Лев(СокрЛ(ФайлЗагрузки),8))+».DBF»;;
long = 1;
ФС.УстТекКаталог(КаталогЗагрузки);
Результат = «»;
Результат = ФС.НайтиПервыйФайл(ФайлЗагрузки);
Если Результат<>»» Тогда
ФС.ПереименоватьФайл(СокрЛП(КаталогЗагрузки)+»»+ Результат,СокрЛП (КаталогЗагрузки)+»» + КороткоеИмяФайла,1);//теперь наш файл называется R91000.dbf
КонецЕсли;
Иначе
КороткоеИмяФайла=СокрЛП(Лев(ФайлЗагрузки,Поз)+»DBF»);
КонецЕсли;
КонецПроцедуры

Процедура Сформировать()
ИмФайл=СокрЛП(КороткоеИмяФайла);
Док1 = СоздатьОбъект(«Документ.РеестрСчетовВходящийЛПУ»);
ДБФ = СоздатьОбъект(«XBase»);
ФС.УстТекКаталог(КаталогЗагрузки);
ДБФ.ОткрытьФайл(ИмФайл,,1);
Док1.Новый();
ДБФ.Первая();
Пока ДБФ.ВКонце() = 0 Цикл
Док1.НоваяСтрока();
//и т.д.
[/codebox]

В новом варианте обработка файлов с длинными именами все равно невозможна, программа вылетает с теми же ошибками. Подскажите, возможно ли реализовать мою задумку в 1С?

Войти или зарегистрироваться

7.7 Ограничение в имени файла

Тема в разделе «Общие вопросы «1С:Предприятие 7.7″», создана пользователем privet, 29 июл 2011.




0/5,
Голосов: 0
  1. TopicStarter Overlay

    privet

    Offline

    privet
    Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26

    Всем добрый день! Возникла проблема, написала обработку загрузки файла формата dbf и при загрузке вылезает сообщение:Длина имени файла превысила 8 символов! Как можно решить такую проблему, помогите, плиз.


    privet,
    29 июл 2011
    #1

  2. Dmitriy_76

    Offline

    Dmitriy_76
    Опытный в 1С
    Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.224
    Симпатии:
    15
    Баллы:
    29

    если попробовать имя в кавычки…как и поступает винда с длинными именами..


    Dmitriy_76,
    29 июл 2011
    #2

  3. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.878
    Симпатии:
    1.027
    Баллы:
    204

    никак — 8 символов. точка.


    nomad_irk,
    29 июл 2011
    #3

  4. WaRDeR

    Offline

    WaRDeR
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.264
    Симпатии:
    19
    Баллы:
    29

    Для работы с ДБФфайлами я обычно делаю так:
    1. Копирую нужный файл во временную папку
    2. Переименовываю (латиница + цифры)
    3. Работаю…..
    4. Копирую обратно с заменой


    WaRDeR,
    29 июл 2011
    #4

  5. Бухгалтерский угодник

    Offline

    Бухгалтерский угодник
    Администраторы
    Команда форума
    Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.622
    Симпатии:
    542
    Баллы:
    204

    Более 8 символов в имени файла DBF в 1с низззззяяя


    Бухгалтерский угодник,
    29 июл 2011
    #5

  6. WaRDeR

    Offline

    WaRDeR
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.264
    Симпатии:
    19
    Баллы:
    29

    Код:
    2. Переименовываю (латиница + цифры)
    

    Именно это и имел в виду, что переименовываю до восьми символов, что бы с ним можно было работать.


    WaRDeR,
    29 июл 2011
    #6
  7. TopicStarter Overlay

    privet

    Offline

    privet
    Опытный в 1С

    Регистрация:
    5 апр 2011
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26

    Спасибо, так и сделаю)


    privet,
    29 июл 2011
    #7
(Вы должны войти или зарегистрироваться, чтобы ответить.)
Показать игнорируемое содержимое
Похожие темы

  1. ANDRE

    8.х
    Определение полное имени файла в каталоге

    ANDRE,
    22 апр 2008
    , в разделе: Конфигурирование на платформе «1С:Предприятие 8»
    Ответов:
    2
    Просмотров:
    1.794
    ANDRE
    23 апр 2008

  2. vaily

    8.х ОБМЕН
    Самопроизвольное изменение кодировки в имени файла обмена

    vaily,
    3 июн 2009
    , в разделе: Обмен данными в «1С:Предприятие 8»
    Ответов:
    3
    Просмотров:
    3.081
    uza
    10 июн 2009

  3. Tatiana1042

    8.х ЗУП
    Ошибка имени файла отчета 2-ндфл

    Tatiana1042,
    11 мар 2017
    , в разделе: «1С:Зарплата и управление персоналом ЗУП»
    Ответов:
    14
    Просмотров:
    8.785
    exp1c
    15 мар 2017

Загрузка…
Ваше имя или e-mail:
У Вас уже есть учётная запись?
  • Нет, зарегистрироваться сейчас.
  • Да, мой пароль:
  • Забыли пароль?

Запомнить меня


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Поиск

  • Искать только в заголовках
Сообщения пользователя:

Имена участников (разделяйте запятой).

Новее чем:
  • Искать только в этой теме
  • Искать только в этом разделе
    • Отображать результаты в виде тем

Быстрый поиск

  • Последние сообщения

Больше…

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • 1с ошибка при вызове метода контекста прочитатьxml ошибка преобразования данных xml
  • 1с ошибка при вызове метода контекста прочитать ошибка при выполнении файловой операции