[РЕШЕНО] 1с8.3 как скопировать файлы из папки в паку

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

  1. TopicStarter Overlay
    Nik02071
    Offline

    Nik02071 Опытный в 1С

    Регистрация:
    12 ноя 2008
    Сообщения:
    347
    Симпатии:
    1
    Баллы:
    29
    Управляемые формы, клиент-сервер как правильно указать путь, чтобы скопировать из папки в паку на сервере
    Код:
    НаСервереБезКонтекста
    Процедура Команда1НаСервере()
        МассивСтолов=Новый Массив(3);
     
        МассивСтолов[0]="STOL01";
        МассивСтолов[1]="STOL05";
        МассивСтолов[2]="STOL11";
        УникИдент=Новый УникальныйИдентификатор;
        Адр=ПоместитьВоВременноеХранилище(МассивСтолов,УникИдент);
        Для Каждого ЭлементМассивСтол Из  МассивСтолов Цикл
        КопироватьФайл("G:\Raschet\Спр_Физ_Лиц(источник)\"+ЭлементМассивСтол+"\F01.DBF","G:\Raschet\Rec\"+ЭлементМассивСтол+"\F01.DBF");  
            КонецЦикла;
    //ФайлИсточник = "\\192.168.0.236\G:\Источник.docx";
    //    ФайлПриемник = "\\192.168.0.236\G:\Приемник.docx";
    //    КопироватьФайл(ФайлИсточник, ФайлПриемник);
    КонецПроцедуры;
    где G - это диск сервера подключенный к клиентскому компьютеру, в обычных формах это работает, а в управляемых нет.
    Последнее редактирование модератором: 10 авг 2015
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Копирование файлов доступно в клиентском контексте.
    Для чего вызывается сервер в данном случае?
  3. TopicStarter Overlay
    Nik02071
    Offline

    Nik02071 Опытный в 1С

    Регистрация:
    12 ноя 2008
    Сообщения:
    347
    Симпатии:
    1
    Баллы:
    29
    Все понял получилось
  4. kisol
    Online

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    394
    Симпатии:
    41
    Баллы:
    54
    Из табличной части берется путь откуда копировать, цикл находит все файлы и папки, копируем их по заданному пути.
    Проблема с копированием папки, приходится делать проверку на папку и создавать ее программно, но в 3 цикле, если папка внутри папки выдается ошибка связанная с папкой %)


    Код:
    &НаКлиенте
    Процедура СкопироватьФайлыТЕСТ(Команда)
        Для Каждого СтрокаТЧ ИЗ Объект.ТабОткудаКопировать Цикл //обходим табличную часть, в ней строки с путем где лежат файлы
               НайденныеФайлы = НайтиФайлы(СтрокаТЧ.ПутьОткудаКопировать, "*.*"); // на выходе массив файлов
                Для Каждого Файл Из НайденныеФайлы Цикл //нашли все файлы, проходим по ним циклом
                 Если Файл.ЭтоКаталог() Тогда //если нашли каталог, то создаем новый каталог и 
                    СоздатьКаталог(Объект.ПутьКудаКопировать+"\"+Файл.Имя);
                    НайденныеФайлыВКаталоге = НайтиФайлы(Файл.ПолноеИмя, "*.*");
                    Для каждого ФайлВКаталоге Из НайденныеФайлыВКаталоге Цикл //копируем файлы если они там есть
                      КопироватьФайл(ФайлВКаталоге.ПолноеИмя, Объект.ПутьКудаКопировать+"\"+файл.Имя+"\"+ФайлВКаталоге.Имя);
                    КонецЦикла;
                Иначе
                    КопироватьФайл(Файл.ПолноеИмя, Объект.ПутьКудаКопировать+"\"+Файл.Имя);
                КонецЕсли;  
            КонецЦикла;
        КонецЦикла;
        Сообщить("Скопировал");
    КонецПроцедуры
    
    Последнее редактирование: 11 авг 2015
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    Отладчиком проверяй путь создания каталога, создался ли каталог, есть ли права на чтение списка файлов/самих файлов внутри копируемого подкаталога.
    Последнее редактирование: 11 авг 2015
    kisol нравится это.
  6. kisol
    Online

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    394
    Симпатии:
    41
    Баллы:
    54
    Отладчик доходит, и тут встречает снова каталог и вываливается в ошибку (если создать еще одну проверку на каталог, то эти прибавит лишь один уровень вложенности, но мне их нужно много (куча папок внутри)

    Для каждого ФайлВКаталоге Из НайденныеФайлыВКаталоге Цикл //копируем файлы если они там есть
    КопироватьФайл(ФайлВКаталоге.ПолноеИмя, Объект.ПутьКудаКопировать+"\"+файл.Имя+"\"+ФайлВКаталоге.Имя);
    КонецЦикла;
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.554
    Симпатии:
    716
    Баллы:
    204
    В первом приближении как-то так:

    Код:
    &НаКлиенте
    Процедура СкопироватьФайлыРекурсивно(ПутьОткудаКопировать, ПутьКудаКопировать)
    
          НайденныеФайлы = НайтиФайлы(ПутьОткудаКопировать, "*.*");
          Для Каждого Файл Из НайденныеФайлы Цикл //нашли все файлы, проходим по ним циклом
             ПутьПриемник = ПутьКудаКопировать+"\"+Файл.Имя;
             Если Файл.ЭтоКаталог() Тогда //если нашли каталог, то создаем новый каталог и
                  СоздатьКаталог(ПутьПриемник);
                  СкопироватьФайлыРекурсивно(Файл.ПолноеИмя, ПутьПриемник);
             Иначе
                  КопироватьФайл(Файл.ПолноеИмя, ПутьПриемник);
             КонецЕсли;
           КонецЦикла;
    КонецПроцедуры
    
    &НаКлиенте
    Процедура СкопироватьФайлыТЕСТ(Команда)
        Для Каждого СтрокаТЧ ИЗ Объект.ТабОткудаКопировать Цикл //обходим табличную часть, в ней строки с путем где лежат файлы
             СкопироватьФайлыРекурсивно(СтрокаТЧ.ПутьОткудаКопировать, Объект.ПутьКудаКопировать)
        КонецЦикла;
        Сообщить("Скопировал");
    КонецПроцедуры
    
    Не запускал, нужна отладка.
    Последнее редактирование: 11 авг 2015
    kisol нравится это.

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