ДБФ файл. Ругается на длину имени |
Я |
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);
БД.СоздатьФайл(ИмяФайла);
Спасибо.
1 — 02.10.09 — 09:11
Не превышай
2 — 02.10.09 — 09:12
мне вот тоже это интересно, а то приходится делать файлы с именем не более 8 символов…
3 — 02.10.09 — 09:13
465465465465461 — больше восми знаков… наверное поетому :)))
4 — 02.10.09 — 09:13
Напиши так ИмяФайла = "c:4654.DBF" тут твой код КомандаСистемы("ren c:4654.DBF c:465465465465461.DBF"); А потом иди на базар и купи там гУся.
5 — 02.10.09 — 09:17
(4) не, это понятно что можно сделать…
а вот существует ли возможность изначально делать файл с именем длинее 8 символов?
6 — 02.10.09 — 09:18
(5) Существует. Не использовать объект XBase, например.
Или не использовать 1с.
Или не использовать компьютер.
Или…
7 — 02.10.09 — 09:23
Описание:
XBase — основной объект для работы с таблицами баз данных в формате DBF. Предоставляет доступ к коллекции полей и индексов таблицы, позволяет открывать и записывать файлы таблиц, работать с записями таблицы.
При работе с файлами DBF следует иметь в виду, что имя файла должно удовлетворять ограничению 8.3.
8 — 02.10.09 — 09:23
СП рулит
9 — 02.10.09 — 09:26
На всякий случай перевожу написанное в (7) — не понимает DBF больше 8 символов в имени файла. И кириллицу не понимает там же. Стандарт такой. Имя должно быть как по старинке в DOS (операционка такая была). FILENAME.DBF. Всё.
10 — 02.10.09 — 09:28
сначала дать простое имя, потом переименовать как надо — проверено, работает
11 — 02.10.09 — 09:31
(9) хорошая была операционка)))) не то что винда…
12 — 02.10.09 — 09:31
(4)Спасибо. только использовал move
13 — 02.10.09 — 09:32
(12)Потом хрен откроешь пока не переименуешь обратно.
14 — 02.10.09 — 09:34
(13)во во, вроде он или не даст открыть такой файл, или вроде бы только первые 8 символов названия будет читать…
15 — 02.10.09 — 09:45
(9) эээ… а в семерке вроде как понимал…
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
Подскажите как бороться с этой ошибкой ФайлДБФ.ОткрытьФайл(ИмяФайла);
__________________
0 |
|
Модератор
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 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
25.12.2013, 22:19 |
4 |
|
Это ограничение объекта XBase Добавлено через 35 секунд
Dethmontt, это понятно, а есть способ чтобы загружать более 8 символов? Да, есть! Не использовать XBase Добавлено через 2 минуты
1 |
|
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
|
25.12.2013, 22:30 [ТС] |
5 |
|
Dethmontt, плохо что больше нет вариантов
0 |
|
Модератор
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 |
|
Dethmontt, плохо что больше нет вариантов а чем не подходит переименование файла? Его вообще грамотней всего скопировать в тмп-каталог.
1 |
|
Модератор
3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
|
26.12.2013, 01:19 |
8 |
|
Ermak27
а чем не подходит переименование файла? Его вообще грамотней всего скопировать в тмп-каталог. Переведу что сказал duk337. Добавлено через 3 минуты
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
-
Offline
privet
Опытный в 1С- Регистрация:
- 5 апр 2011
- Сообщения:
- 67
- Симпатии:
- 0
- Баллы:
- 26
Всем добрый день! Возникла проблема, написала обработку загрузки файла формата dbf и при загрузке вылезает сообщение:Длина имени файла превысила 8 символов! Как можно решить такую проблему, помогите, плиз.
privet,
29 июл 2011
#1 -
Offline
Dmitriy_76
Опытный в 1С
Команда форума- Регистрация:
- 26 мар 2011
- Сообщения:
- 2.224
- Симпатии:
- 15
- Баллы:
- 29
если попробовать имя в кавычки…как и поступает винда с длинными именами..
Dmitriy_76,
29 июл 2011
#2 -
Online
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.878
- Симпатии:
- 1.027
- Баллы:
- 204
никак — 8 символов. точка.
nomad_irk,
29 июл 2011
#3 -
Offline
WaRDeR
Модераторы
Команда форума
Модератор- Регистрация:
- 23 ноя 2006
- Сообщения:
- 3.264
- Симпатии:
- 19
- Баллы:
- 29
Для работы с ДБФфайлами я обычно делаю так:
1. Копирую нужный файл во временную папку
2. Переименовываю (латиница + цифры)
3. Работаю…..
4. Копирую обратно с заменой
WaRDeR,
29 июл 2011
#4 -
Offline
Бухгалтерский угодник
Администраторы
Команда форума
Администратор- Регистрация:
- 29 дек 2008
- Сообщения:
- 22.622
- Симпатии:
- 542
- Баллы:
- 204
Более 8 символов в имени файла DBF в 1с низззззяяя
Бухгалтерский угодник,
29 июл 2011
#5 -
Offline
WaRDeR
Модераторы
Команда форума
Модератор- Регистрация:
- 23 ноя 2006
- Сообщения:
- 3.264
- Симпатии:
- 19
- Баллы:
- 29
Код:2. Переименовываю (латиница + цифры)
Именно это и имел в виду, что переименовываю до восьми символов, что бы с ним можно было работать.
WaRDeR,
29 июл 2011
#6 -
Offline
privet
Опытный в 1С- Регистрация:
- 5 апр 2011
- Сообщения:
- 67
- Симпатии:
- 0
- Баллы:
- 26
Спасибо, так и сделаю)
privet,
29 июл 2011
#7
- Похожие темы
-

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

8.х ОБМЕН
Самопроизвольное изменение кодировки в имени файла обмена
vaily,
3 июн 2009, в разделе: Обмен данными в «1С:Предприятие 8»
- Ответов:
- 3
- Просмотров:
- 3.081
- uza
- 10 июн 2009
-

8.х ЗУП
Ошибка имени файла отчета 2-ндфл
Tatiana1042,
11 мар 2017, в разделе: «1С:Зарплата и управление персоналом ЗУП»
- Ответов:
- 14
- Просмотров:
- 8.785
- exp1c
- 15 мар 2017
- Ваше имя или e-mail:
- У Вас уже есть учётная запись?
-
- Нет, зарегистрироваться сейчас.
- Да, мой пароль:
-
Забыли пароль?
-
Запомнить меня
-
- Искать только в заголовках
- Сообщения пользователя:
-
Имена участников (разделяйте запятой).
- Новее чем:
-
- Искать только в этой теме
- Искать только в этом разделе
- Отображать результаты в виде тем
-
Быстрый поиск
- Последние сообщения
Больше…
