[РЕШЕНО] FileSystemObject

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Tasya, 29 янв 2015.

  1. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Добрый день!
    Платформа 8.2.19.76.
    Есть обработка. при нажатии на кнопку должна вывести имя папки.
    При запуске выдает Ошибку: {Форма.Форма.Форма(602)}: Ошибка при вызове метода контекста (GetFolder): Произошла исключительная ситуация (0x800a004c). Помогите разобраться, где я ошибаюсь.

    Вот код:
    Код:
    &НаКлиенте
    Процедура Файлы(Команда)
        ФайлыСервер();
    КонецПроцедуры
    
    &НаСервере
    Процедура ФайлыСервер()
        Попытка
        FSO = Новый COMОбъект("Scripting.FileSystemObject");
        File = FSO.GetFolder("D:\Files");
        Сообщить(File.Name); //сообщить имя папки
       
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    
    КонецПроцедуры
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
  3. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Как вариант:
    Если не файловый вариант работы, то сервер 1С ничего не знает про путь на локальной машине пользователя.
  4. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Попробовала. Выводит "нет папки", хотя папка есть.

    Код:
    &НаКлиенте
    Процедура Файлы(Команда)
        ФайлыСервер();
       
    КонецПроцедуры
    
    &НаСервере
    Процедура ФайлыСервер()
        Попытка
        ИмяПапки = "D:\Files";
        FSO = Новый COMОбъект("Scripting.FileSystemObject");
        Если FSO.FolderExists(ИмяПапки) Тогда
            Сообщить("Есть папка");
        Иначе
            Сообщить("Папки нет");
        КонецЕсли;
       
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
    
    КонецПроцедуры
    
    --- Объединение сообщений, 29 янв 2015 ---
    У меня Клиент-серверный вариант работы. И как тогда быть?
  5. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Вообще я начала изучать FileSystemObject, потому что мне нужно сформировать обработку, которая будет запускаться регламентно на сервере.
    Обработка загружает информацию из текстовых файлов, которые лежат в папке на сервере.
    Файлов будет несколько и имеют одинаковое начало в имени. Я хочу получить имена файлов и поочередно их читать.

    Может есть гораздо легкие способы это сделать?
  6. KrivosheevEV
    Offline

    KrivosheevEV Новичок в 1С

    Регистрация:
    3 мар 2014
    Сообщения:
    35
    Симпатии:
    2
    Баллы:
    4
    Вот это замах. Мне нравится.

    Но, судя по новым данным, нужно сделать ещё один шаг назад и объяснить задачу ещё более детально.
  7. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Хорошо.
    Платформа 8.2.19.76. Клиент-серверный вариант.
    Есть обработка, которая считывает информацию из текстового файла и загружает ее в справочник/длокумент.

    Код:
       КаталогФайлов = "D:\Files";
       ИмяФайла = "File1.txt";
       ПолноеИмяФайла = КаталогФайлов + "\" + ИмяФайла;
      
       Файл = Новый ТекстовыйДокумент;
       Файл.Прочитать(ПолноеИмяФайла)
      
       Для Строка = 1 По файл.КоличествоСтрок()Цикл
         //загружаю строки файла  
       КонецЦикла;
    Как быть, если файлов в папке несколько, и их нужно обработать все?
    Я планировала получить с помощью FileSystemObject все имена файлов в папке и по ним обращаться.
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    чем не устраивает типовой метод 1С НайтиФайлы()?
    Если файлы будут располагаться на той же машине, на которой запущен 1С сервер, то проблемы могут возникнуть, только в случае, если у пользователя, от которого запущен сервер 1С, нет прав на чтение содержимого указанного пути.
  9. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Спасибо! Сейчас буду пробовать.
  10. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Файлы располагаются на моей локальной машине (для тестирования). Обработку запускаю в толстом клиенте на своей локальной машине.
    Сервер 1С запущен на другой машине (физический сервер). Файла в каталоге 3, а выдает 0.
    Код:
    &НаКлиенте
    Процедура Файлы(Команда)
        ФайлыСервер();
       
    КонецПроцедуры
    
    &НаСервере
    Процедура ФайлыСервер()
        
        НайденныйФайлы = НайтиФайлы("D:\Files", "*.txt");
        Сообщить(НайденныйФайлы.Количество());
    
    КонецПроцедуры
    
    Нужно ли, чтобы пользователь от которого запущен сервер 1С имел права на чтение на каталог с файлами на моей машине?
  11. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.549
    Симпатии:
    716
    Баллы:
    204
    Если толстый клиент, то уберите выполнение со стороны сервера.

    Даже если пользователь, под которым запущен сервер 1С, будет иметь доступ к папке на вашей машине, это ему не поможет, т.к. он не знает ничего про буквы дисков.
    для него существует абсолютный адрес общего ресурса в сети вида \\ИМЯ_МАШИНЫ\ИМЯ_РЕСУРСА
  12. TopicStarter Overlay
    Tasya
    Offline

    Tasya Опытный в 1С

    Регистрация:
    9 сен 2013
    Сообщения:
    148
    Симпатии:
    3
    Баллы:
    29
    Спасибо! Все работает!

Поделиться этой страницей