ОБСУЖДЕНИЕ

файловая система 1с77

14 ответов 8,2 тыс.
Автор темы
Есть несколько файлов, например "HNF0112019.663" и "HNF0112030.664" (тип текстовый/csv). Они находятся в одном каталоге. Нужно осуществить выборку файлов по нужным параметрам в имени файлов, чтобы последовательно импортировать их в документ. Я сначала должна построить шаблон имени файла, по которому буду искать их.
Я делала это вот таким образом, но мне выдает ошибку, что неправильный формат файла:
ШаблонИмениФайла = "HNF*"+День+Месяц+"*.*";
или
ШаблонИмениФайла = "HNF*"+День+Месяц+"***.*";
Что тут не так?
После того как я найду первый файл, я должна найти по шаблону следующий файл. Как осуществить перебор файлов по данному шаблону имени файла? Может надо использовать метод ФС.НайтиСледующийФайл(), но я не понимаю как это увязать вместе. Буду благодарна за советы и помощь)
 
Можно и просто перебрать все в каталоге, и парсить имена ...
 
Видимо, лучше так
ШаблонИмениФайла = "HNF"+День+Месяц+".*";
годится, если день и месяц - строки из двух символов, иначе надо их преобразовать к двухсимвольным строкам
 
Попробовала вот так, а оно попадает на сообщение, что файл не найден (ищет файл с именем HNF112.*, а надо HNF0112019.663):
Код:
ШаблонИмениФайла = "HNF"+День+Месяц+".*";
Файл=КаталогИБ()+ИмяПапки+"\"+ШаблонИмениФайла;
Если ФС.СуществуетФайл(Файл)=0 Тогда
Сообщить("Файл не найден: "+Файл,"!");
Возврат;
КонецЕсли;
PS: Путь к папке с файлом правильно показывает: D:\База студентов\ImportPlatezhei\HNF112.*
День и месяц получаю следующим образом:
Код:
День = ДатаЧисло(ДатаДок);
ИмяПапки = "ImportPlatezhei";
Месяц = ПреобразоватьВШестнадцатиричнуюСистему(ДатаМесяц(ДатаДок));
 
ШаблонИмениФайла = "HNF"+День+Месяц+".*";
Я бы поставил проверку типа -
Код:
Если Число(День) > 10 Тогда
День = Строка("0"+День);
КонецЕсли
 
Я бы поставил проверку типа -
А как тогда быть с цифрами после месяца, они же отличаются в каждом файле:
HNF0 1 12 019.663
 
Видимо, лучше так
ШаблонИмениФайла = "HNF"+День+Месяц+".*";
годится, если день и месяц - строки из двух символов, иначе надо их преобразовать к двухсимвольным строкам
я писал приблизительно про это.

в вашем случае - напишите что означает каждая цифра - какие могут быть шаблоны?
 
Структура названия файла :

HNFcddmmzzz.MFO, где HNF -имя идентифицирующее учреждение (постоянное), с - номер ЦБУ (в большинстве случаев равен 0), dd -день, mm - месяц в 16-ричной системе, zzz - внутр. счетчик в банке, MFO - МФО филиала.
 
zzz - внутр. счетчик в банке,
т.е. проблемма получается только с этим?

кстати, в вашем шаблоне пропущенно
с - номер ЦБУ (в большинстве случаев равен 0)
т.е. логично было бы сделать - ШаблонИмениФайла = "HNF0"+День+Месяц+".*";

Или можно добавить переменную ЦБУ = 0 и делать так ШаблонИмениФайла = "HNF"+ЦБУ+День+Месяц+".*";
ЦБУ можно засунуть в цикл от 0 до 9
 
спасибо всем за помощь, вроде все работает уже)
 
Если ФС.СуществуетФайл(Файл)=0 Тогда
Сообщить("Файл не найден: "+Файл,"!");
Возврат;
КонецЕсли;

Можно много обсуждать про шаблон, но так работать все равно не будет. Надо именно циклом перебрать файлы через ФС.НайтиСледующийФайл()
 
Я вот как сделала:
Код:
ШаблонИмениФайла = "HNF*"+День+Месяц+"*.*";
Файл=ФС.НайтиПервыйФайл(ШаблонИмениФайла);
Если ФС.СуществуетФайл(Файл)=0 Тогда
Сообщить("Файл не найден: "+Файл,"!");
Возврат;
КонецЕсли;
Пока ФС.СуществуетФайл(Файл)=1 Цикл
.....
Файл=ФС.НайтиСледующийФайл();
КонецЦикла;
 
и это неглупо :)
 

Да не надо молоденьким льстить! Коряво это. Если хотим обработать несколько файлов, то должно быть
Пока ФС.НайтиСледующийФайл() = 1