Имя: Пароль:
1C
 
Длина имени файла превысила 8 символов! Есть решение?
0 Samir
 
16.03.10
10:37
Загружаю электронную накладную DBF, но название 12 символов и соответственно ругается
Подскажите народ, есть ли решение данной проблемы?
1 Нуф-Нуф
 
16.03.10
10:38
переименовать?
2 povar
 
16.03.10
10:39
(1) +1
3 mikecool
 
16.03.10
10:39
название меньше еще не предлагали?
4 kiruha
 
16.03.10
10:40
(1)+2
5 Cthulhu
 
16.03.10
10:41
сделать 8 символов.
делается так.
1) находишь нужный файл (символов сколько хочешь в имени);
2) копируешь его во временный файл с уникальным именем длиной меньще 9-ти символов;
3) грузишь их этого (п.2) файла данные;
4) удаляешь этот (п.2) временный файл.
6 Samir
 
16.03.10
10:42
Трабла в том, что поставщик присылает 2 фала DBF:
transinvcust.dbf
transinvcustspecs.dbf

В них по 5-6 накладных. Нужно сначало открыть первую, поймать связку и после найденной связки открывать 2-ую и создавать документы.
Переименовав, я не отличу 1 файл от второго. Ибо первые 8 символов у них одинковые.
7 hhhh
 
16.03.10
10:43
(6) развеселил. Спасибо.
8 vde69
 
16.03.10
10:44
transinvcust.dbf = trans01.dbf
transinvcustspecs.dbf = trans02.dbf
9 Samir
 
16.03.10
10:44
(7) обращайтесь
10 Господин ПЖ
 
16.03.10
10:45
(6) ds: отвердение мозга
11 hhhh
 
16.03.10
10:45
(9) переименуй в 1.dbf и 2.dbf
12 Samir
 
16.03.10
10:46
(11) Да понял я, спасибо. Просто думал мало-ли, мож нашли какое решение без переименовывания.
13 Эльниньо
 
16.03.10
10:46
ФС.ПереименоватьФайл("transinvcust.dbf", "st.dbf");
ФС.ПереименоватьФайл("transinvcustspecs.dbf", "stspecs.dbf");
14 Противный
 
16.03.10
10:47
(8) а если через "~" писать, как сокращенные имена DOS?

transinvcust.dbf = transi~1.dbf
transinvcustspecs.dbf = transi~2.dbf
15 МихаилМ
 
16.03.10
10:48
есть.
АтрибутыФайла(<ИмяФайла>,<РазмерФайла>,<АтрибутыФайла>,<ВремяСоздания>,<ВремяПоследнегоДоступа>,<ВремяПоследнейЗаписи>,<РасширенноеИмяФайла>)
Назначение:
Возвращает атрибуты файла (в параметрах).
Параметры:
<ИмяФайла> - строка с именем файла;
<РазмерФайла> - переменная, принимающая размер файла в байтах;
<АтрибутыФайла> - переменная, принимающая атрибуты файла;
Возвращаемое строковое значение длиной 9 символов, в котором закодированы атрибуты файла. Символы могут принимать значения ''0'' или ''1'':
первый символ: если ''1'' - файл только для чтения;
второй символ: если ''1'' - скрытый файл;
третий символ: если ''1'' - системный файл;
четвертый символ: если ''1'' - каталог;
пятый символ: если ''1'' - архивный файл;
шестой символ: если ''1'' - обычный файл (все другие атрибуты не установлены);
седьмой символ: если ''1'' - временный файл;
восьмой символ: если ''1'' - файл, сжатый каким-либо архиватором;
девятый символ: если ''1'' - нет доступа к файлу.
<ВремяСоздания> - переменная, принимающая строку с датой и временем создания файла;
<ВремяПоследнегоДоступа> - переменная, принимающая строку с датой и временем последнего доступа к файлу;
<ВремяПоследнейЗаписи> - переменная, принимающая строку с датой и временем последней записи файла;
<РасширенноеИмяФайла> - переменная, принимающая строку с полным именем файла.

Подробнее см. в книгу ''1С:Предприятие 7.7. Описание встроенного языка. Часть 2'', глава 37 ''Работа с Файлами''.
16 Иду
 
16.03.10
10:48
fso=СоздатьОбъект("Scripting.FileSystemObject");
База.ОткрытьФайл(fso.GetFile(ФайлДБФ).ShortPath,,0);//Это исчо лучче...
(с) smaharbA
17 Samir
 
16.03.10
10:55
(16) Чет не работает :(
18 aka AMIGO
 
16.03.10
10:59
19 Samir
 
16.03.10
12:40
Продолжаем тему, почему не перименовывет файл?

ФС.ПереименоватьФайл("transinvcust.dbf", "st.dbf");
ФС.ПереименоватьФайл("transinvcustspecs.dbf", "stspecs.dbf");

Первый раз переименовал, а повторно хоть ты тресни не хочет.
Проходит весь код, но файлы не переименовывет.

Код:

   ДБФ=СоздатьОбъект("XBase");
   ИмяФайла="transinvcust.dbf";
   ИмяПути="D:\Documents and Settings\Рабочий стол\invoice\";
   ПутьДБ=ИмяПути+ИмяФайла;
   Если ФС.СуществуетФайл(ПутьДБ)=1 Тогда
       ФС.ПереименоватьФайл("transinvcust.dbf", "st.dbf",1);
       ФС.ПереименоватьФайл("transinvcustspecs.dbf", "stspecs.dbf",1);
       ИмяФайла="st.dbf";
       ИмяФайла1="stspecs.dbf";    
   КонецЕсли;
   Если СтрДлина(ИмяФайла)>12 Тогда
       Предупреждение("Файлов загрузки не обнаружено!!!");
       Возврат;
   КонецЕсли;
   ПутьДБ="";
   ПутьДБ1="";
   ПутьДБ=ИмяПути+ИмяФайла;
   ПутьДБ1=ИмяПути+ИмяФайла1;
   ДБФ.ОткрытьФайл(ПутьДБ);
   Если ДБФ.Открыта()=1 Тогда
       //Сообщить("Электронная накладная удачно открыта",1);
   Иначе
       Предупреждение("Неудачная попытка открытия электронной накладной !!!");
       Возврат;
   КонецЕсли;


ДБФ.Открыта()=0;
Файлы не перименованы. Ниче не могу понять.
20 Cthulhu
 
16.03.10
12:42
(19): см.(5)
21 Samir
 
16.03.10
12:44
(20) И сразу глупый вопрос, как копировать?
Вроде опять таки ФС.ПерименоватьФайл()?
22 Cthulhu
 
16.03.10
12:51
(21): нет. читай СП.
23 МихаилМ
 
16.03.10
14:28
не мучайтесь
я Вам же в (15) написал
24 Cthulhu
 
16.03.10
14:32
(23): ну, во-первых, ты написал фигню - точнее не фигню, а ответ не на тот вопрос.
а во-вторых, ещё в (5) подробно написано как решить задачу не изменяя исходные файлы (хотя и не разжё языка).
25 Гость2
 
16.03.10
14:57
(6) Файлы DBF-V. Грузи драйверы от Фокс-Про последнего и будет тебе счастье.
26 smaharbA
 
16.03.10
14:58
(14) и чо будет ?
27 Гость2
 
16.03.10
15:02
//Открываем соединение
   DBConn = CreateObject("ADODB.Connection");  
   
   DBConn.Open("Provider=vfpoledb;" +
   "Data Source=" + _КаталогФайла + "\Goscontract.dbf;" +
   "Mode=ReadWrite|Share Deny None;"+
          "Collating Sequence=MACHINE;"+
          "Password='';");
   //Делаем выборку
   ФГК = DBConn.Execute("Select * from [Goscontract]");
   
   Пока ФГК.EOF=0 Цикл //Цикл по записям DBF
       
       IDGK    = ФГК.Fields("IDGK").value;
       NGK        = ФГК.Fields("NGK").value;
       DT        = ФГК.Fields("DT").value;
       DT_BEGIN= ФГК.Fields("DT_BEGIN").value;
       DT_END    = ФГК.Fields("DT_END").value;
       TIPLG    = ФГК.Fields("TIPLG").value;
       OWNER    = ФГК.Fields("OWNER").value;
       COMMENT    = ФГК.Fields("COMMENT").value;
       ABR        = ФГК.Fields("ABR").value;
       ............................................
       ФГК.MoveNext(); //Переходим к след. записи DBF
   КонецЦикла;
//    
   DBConn.Close(); //Закрываем соединение
28 Гость2
 
16.03.10
15:05
+(27) Внимательно смотри формат даты.
29 smaharbA
 
16.03.10
16:15

//*******************************************
Процедура Сформировать()
   Путь=КаталогПользователя();
   Имя="Отчет Рынок загородной недвижимости.dbf";
   ЗначениеВФайл(Путь+Имя,"",0);
   //Химия
   Времянка=КаталогВременныхФайлов()+_GetPerformanceCounter()+".txt";
   КомандаСистемы("for %i in ("""+Путь+Имя+""") do echo %~si > "+Времянка);
   Текст=СоздатьОбъект("Текст");
   Текст.Открыть(Времянка);
   Сообщить(Текст.ПолучитьСтроку(1));
   ФС.УдалитьФайл(Времянка);
КонецПроцедуры
30 Гость2
 
16.03.10
16:31
(29) А напрямую из dbf слабо?
31 fez
 
16.03.10
16:39
(19) Предварительно удаляй те файлы, в которые переименовываешь.
32 smaharbA
 
16.03.10
16:54
(30) а что в (29) разве иначе ?
33 Арчибальд
 
16.03.10
17:57
В методе ПереименоватьФайл() либо нужно указывать полные имена файлов, либо применить сначала УстТекКаталог()
34 SaschaWild
 
16.03.10
18:45
Решение в данном случае одно, переименовать файл, связано это только ограничение на длину имени, пришедшую с далеких времен.
35 Гость2
 
16.03.10
19:28
(34) -> (27)
36 Ковычки
 
17.03.10
01:01
(34) а можно поинтересоваться какое такое ограничение ?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn