Имя: Пароль:
1C
1С v8
Проверка на существование файла
0 Wefast
 
21.01.16
11:11
Пишу:

ФайлИмпорта = Новый Файл(ИмяФайла);
Если ФайлИмпорта.Существует() Тогда
    Сообщить("Файл cуществует");
КонецЕсли;

В общем он проверяет просто существует ли файл в каталоге в принципе. И не важно как он называется.

Т.е.
ИмяФАйла D:\1.doc
ИмяФАйла D:\2.doc

А в папке есть только 1.doc

Но функция эта в обоих случаях выдает истину.
1 Масянька
 
21.01.16
11:12
(0) Да вы что, издеваетесь сегодня?
2 vicof
 
21.01.16
11:13
(1) Пятница
3 vicof
 
21.01.16
11:13
Практически наступила
4 НЕА123
 
21.01.16
11:14
(1)
ТС не издевается.
это все суслики (с)
5 Масянька
 
21.01.16
11:14
(3) Судя по всему, и не заканчивалась...
6 Serg_1960
 
21.01.16
11:19
Вот интересно сколько постов натроллят, прежде чем автору помогут в его проблеме?
7 vicof
 
21.01.16
11:19
(6) Автор вопрос задать не может, остается только троллить
8 aka AMIGO
 
модератор
21.01.16
11:21
Вопрос вполне задан, суть его просматривается.
Постите по-существу дела.
9 Масянька
 
21.01.16
11:21
(8) Извини, а где вопрос?
10 mikecool
 
21.01.16
11:23
автор врет, функция работает нормально
щас окажется, что либо линул, либо макось - место где лежит файл
11 aka AMIGO
 
21.01.16
11:23
(9) ну, ведь ясно, что автор (по умолчанию) ищет файл 2.doc, функция возвращает истину, хотя этого файла нет.
12 aka AMIGO
 
21.01.16
11:25
+11 мог напутать в коде..
13 vicof
 
21.01.16
11:25
(0) Сообщить(ИмяФайла)
14 Масянька
 
21.01.16
11:25
(11) Не ясно... А если имя файла не важно - как можно найти 2.doc?
15 Dotoshin
 
21.01.16
11:26
(12) Тогда пусть полностью код выкладывает, иначе долго гадать придется...
16 vicof
 
21.01.16
11:27
(14) Плохая из тебя ванга
17 Масянька
 
21.01.16
11:29
(16) Не важно :)
18 Serg_1960
 
21.01.16
11:30
(7) А попросить автора озвучить алгоритм, где по его мнению "не работает" функция проверки?
19 vicof
 
21.01.16
11:31
(18) Лень...
20 mikecool
 
21.01.16
11:31
(18) так попроси, автор то слился )
21 aka AMIGO
 
21.01.16
11:38
(14) Ну я согласен, в общем топик далёк от совершенства. Ясно, однако, что "не важно как он называется" для ТС означает:
- есть путь (папка)
- в этой папке есть файлы
- в поиске указан отсутствующий файл
- функция Существует() возвращает истину
22 Масянька
 
21.01.16
11:41
(21) Это для ТС, а для программы - если "имя файла не важно" значит Истина :)

А так да - надо весь код глянуть.
23 Wefast
 
21.01.16
15:21
ЗабиндинныйПуть = "\\NEWSERV\Share\123\!Files\";
    ТипРекв = ТипЗнч(Элемент.Значение);
    Если Не(ТипРекв) = Тип("Неопределено") Тогда // Проверяю чтобы был выбран сам файл а не только тип файла. У меня там составной тип данных
        ЭлементыФормы.КоманднаяПанель2.Доступность = ИСТИНА; // если файл выбран, делаю доступной табличную часть формы
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Значение КАК Файл,
        |    ЗначенияСвойствОбъектов.Свойство
        |ИЗ
        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Объект = &Объект
        |    И ЗначенияСвойствОбъектов.Свойство.Наименование ПОДОБНО ""%Путь%""";
        
        Запрос.УстановитьПараметр("Объект", ВыбранноеЗначение);
        Результат = Запрос.Выполнить().Выгрузить(); // Тут я получил все доп свойсва документа (свойство начинается с "Путь").
        ЧистаяТаблица = Результат.Скопировать();  // скопировал результа
        
        ЗаписиДляУдаления = Новый ТаблицаЗначений;  // создал новую таблицу
        ЗаписиДляУдаления.Колонки.Добавить("Файл",Новый ОписаниеТипов("Строка"),"Файл");
        ЗаписиДляУдаления.Колонки.Добавить("Свойство",,"Свойство");
        
        Для каждого Строка из ЧистаяТаблица Цикл /
            
            Путь = ЗабиндинныйПуть + СтрЗаменить(Год(ВыбранноеЗначение.Дата),Символы.НПП,"")+"\"+ТипЗнч(ВыбранноеЗначение)+"\"+ВыбранноеЗначение.Номер+"\"+Строка.Файл;
            КаталогНаДиске = Новый Файл(Путь);
            Если НЕ КаталогНаДиске.Существует() Тогда  // проверяю есть ли файл по нужному мне пути
                НоваяСтрока = ЗаписиДляУдаления.Добавить();  // раз нету, добавляю ее в таблицу созданую
                НоваяСтрока.Свойство = Строка.Свойство;
                НоваяСтрока.Файл = Строка.Файл;                
                ЧистаяТаблица.Удалить(Строка);    // удаляю из Скопированной таблицы эту строку
            КонецЕсли;
        КонецЦикла;
        
        Если ЗаписиДляУдаления.Количество()>0 Тогда  // Если накопились файлы которых на самом деле нет
            Режим = РежимДиалогаВопрос.ДаНет;
            Текст = "ru = ""Некоторые файлы не найдены, удалить записи в регистре "";"
            + " en = ""Do you want to continue?""";
            Ответ = Вопрос(НСтр(Текст), Режим, 0);
            Если Ответ = КодВозвратаДиалога.Да Тогда
                Для каждого Строка из ЗаписиДляУдаления Цикл
                    Запись = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи(); // удаляю записи из регистра
                    Запись.Объект = ВыбранноеЗначение;
                    Запись.Свойство = Строка.Свойство;
                    Запись.Прочитать();
                    Запись.Удалить();
                    Сообщить("Запись о не существующем файле "+Строка.Файл+ " удалена!");
                КонецЦикла;
                ЭтотОбъект.ТабличнаяЧасть1.Загрузить(ЧистаяТаблица);  // И загружаю в таб часть таблицу только с файлами что существую
            Иначе
                ЭтотОбъект.ТабличнаяЧасть1.Загрузить(Результат); // либо же ничего не очищаю и все записи по данному доку загружаю в таб часть
            КонецЕсли;
        Иначе
            ЭтотОбъект.ТабличнаяЧасть1.Загрузить(Результат); // Если файлы все есть то просто загружаю Результат запроса в таб часть
        КонецЕсли;
    Иначе
        //тут хочу что то сделать чтобы не нажимать дважды кнопку выбора( т.е. выбрал тип файла и сразу же открылось окно с документами
    КонецЕсли;

Пример. У меня в регистре 3 записи
D:\d.doc ОН существует
D:\dыва.doc его нет
Абракадабра Просто строка, такого файла там тоже нет

Он выдает мне в таблицу два значения
24 Stim
 
21.01.16
15:23
зачем спрашивали весь код?
25 Кирпич
 
21.01.16
15:23
(23) отладчиком пройди и посмотри
26 Wefast
 
21.01.16
15:27
Да, скорее всего не в функции дело, а где то накосячил с логикой и условиями.

Тогда еще вопрос

    СтандартнаяОбработка = ЛОЖЬ;
    Путь = ЗабиндинныйПуть + СтрЗаменить(Год(Документ.Дата),Символы.НПП,"")+"\"+ТипЗнч(Документ)+"\"+ДОкумент.Номер+"\"+Элемент.Значение;
    Попытка
        ЗапуститьПриложение(Путь);    
    Исключение
        //
    КонецПопытки;

Открывает файл если есть приложение по умолчанию которое его открывает. Можно ли как то открыть каталог если к примеру не получается открыть сам файл? Если он еще в проводнике там и с позиционируется на файле то совсем круто. А еще лучше если он стандартное окно винды запустит, когда нет приложения по умолчанию
27 Масянька
 
21.01.16
15:30
(26) А зачем ТАКОЙ бубен?
28 Wefast
 
21.01.16
15:31
(27) Что не так?
29 Stim
 
21.01.16
15:31
(27) где ты бубен увидела?
30 Масянька
 
21.01.16
15:32
(28) Вопрос: что сие значит? Для чего? Ну, весь код...
31 Масянька
 
21.01.16
15:34
(29) А что это по-твоему?
Грузить в таблицу файлы... В 1С... Зачем?
32 Wefast
 
21.01.16
15:35
(30)
У ряда документов нет возможности прикреплять файлы.
Но есть возможность хранить доп свойства.
Строковое значение этого свойства ограничено 50символами.
Поэтому хранить там весь путь затратно.
Так как путь формируется в зависимости от документа

Путь что мне дали/ГОД/Тип дока/Номер документа/файл

То хранить в доп свойствах решено только имя самого файла.

Выбрал документ. Заполнилась табличная часть с этими свойствами. По кнопке открытия должен открыться файл.
Если за типом прикреплено какое то приложение, то Процедура ЗапуститьПриложение() замечательно открывает этот файл, если нет - то выдает ошибку.
Не плохо бы открыть каталог в таком случае (30)
33 Wefast
 
21.01.16
15:37
Таблица не правильно формируется, потому что я удаляю строку из таблицы которую обхожу, и он в итоге все строки не обходит. Так я понял.
Создам видимо еще таблицу. Но их количество мне кажется немного не правильным с точки зрения оптимизации. Ну да и ладно наверное
34 Fish
 
21.01.16
15:38
(32) "У ряда документов нет возможности прикреплять файлы" - Конфа типовая? В чём проблема прикрутить типовой функционал из БСП?
35 Stim
 
21.01.16
15:39
(31) какие файлы, там только наименование файлов
36 Wefast
 
21.01.16
15:39
(34) Управление строительной организацией. Заказчик не захотел снимать конфигурацию с поддержки.
37 Fish
 
21.01.16
15:40
(36) Так не снимай, просто включи "редактируется с сохранением поддержки".
38 Масянька
 
21.01.16
15:41
(34) Поддержу.
(33) Не изобретай велосипед.
(36) А ты зачем? Объясняй заказчику, что данные условия - ну, очень затратно...
39 HardBall
 
21.01.16
15:44
40 Wefast
 
21.01.16
15:44
(38) Я тоже не вижу смысла править 19 документов снимая при этом конфигурацию частично с поддержки(что при какой нибудь новой редакции или обновление, принесет лишь головную боль).
41 Wefast
 
21.01.16
15:44
(39) спасибо
42 Wefast
 
21.01.16
15:51
Попытка
ЗапуститьПриложение(ПутьКфайлу)
ИСключение
КомандаСистемы ("start ПУтьККаталогу");

КонецПопытки

Что то не отрабатывает как я хотел(
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс