Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 20:59

Сохранить файлов

Автор Ивашка, 02 мар 2020, 18:17

0 Пользователей и 1 гость просматривают эту тему.

Ивашка

Изменил код, чтобы можно было указать самим путь, диалог выбора нормально работает, но как теперь изменить функцию, чтоб я мог сам указать путь для сохранения?(сейчас там путь указан в константе)
Процедура ДействияФормыСохранитьИЗакрытьДляВыгрузки(Кнопка)

    Для Каждого ТекСтрока Из ТЗ Цикл

        Если НЕ ТекСтрока.Загрузить Тогда
            Продолжить;
        КонецЕсли;
       
        НачатьТранзакцию();
       
        Отказ = Ложь;
       
        ПолученныйФайл = Новый Файл(ТекСтрока.ПутьКФайлу);
        Если Не ПолученныйФайл.Существует() Тогда
            Сообщить("Файл " + ПолученныйФайл.ПолноеИмя + " не найден!",СтатусСообщения.Важное);
            Предупреждение("Файл " + ПолученныйФайл.ПолноеИмя +" не найден!");
            Отказ = Истина;
            Продолжить;
        КонецЕсли;

        ИмяФайла        = ?(ЗначениеЗаполнено(ТекСтрока.ИмяФайла),ТекСтрока.ИмяФайла,ПолучитьИмяФайла());
        Представление  = ТекСтрока.Представление;
        Расширение        = ТекСтрока.Расширение;
        РазмерФайла      = ТекСтрока.Размер;
       
        Если Не Отказ Тогда
            Попытка
                ИсходныйПутьКФайлу = ПолученныйФайл.ПолноеИмя;
                НовыйПутьКФайлу = ПолныйПутьХраненияДляВыгрузки(ИмяФайла, Расширение);
                Если ИсходныйПутьКФайлу <> НовыйПутьКФайлу Тогда
                    //СлужебныйКаталогЗагрузки=Справочники.ЭР_Константы.ОсновнойКаталогФайловЗагрузка.Значение;                 
                    //Если ЗначениеЗаполнено(СлужебныйКаталогЗагрузки)
                    //  И ТипЗнч(СлужебныйКаталогЗагрузки)=Тип("Строка")
                    //  И НЕ ФайлНаходитсяВСлужебномКаталогеЗагрузки(ПолученныйФайл.ПолноеИмя,СлужебныйКаталогЗагрузки)
                    //  Тогда
                        //лИмяКаталога = ""; лИмяФайла = "";
                        ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
                        ДиалогСохраненияФайла.ПолноеИмяФайла = ИсходныйПутьКФайлу;
                        Фильтр = "Все файлы(*.*)";                 
                        ДиалогСохраненияФайла.Фильтр = Фильтр;
                        ДиалогСохраненияФайла.МножественныйВыбор = Ложь;
                        ДиалогСохраненияФайла.Заголовок = "Выберите путь для сохранения";
                        Если ДиалогСохраненияФайла.Выбрать() Тогда
                            КопироватьФайл(ПолученныйФайл.ПолноеИмя,НовыйПутьКФайлу);
                        Иначе
                            ПереместитьФайл(ПолученныйФайл.ПолноеИмя, НовыйПутьКФайлу);
                        КонецЕсли;

                        //  КаталогНаДиске = Новый Файл(лИмяКаталога);
                        //Если НЕ КаталогНаДиске.Существует() Тогда
                        //  СоздатьКаталог(лИмяКаталога);
                        //КонецЕсли;
                    //  КопироватьФайл(ПолученныйФайл.ПолноеИмя,НовыйПутьКФайлу);
                    //Иначе
                    //  ПереместитьФайл(ПолученныйФайл.ПолноеИмя, НовыйПутьКФайлу);
                    //КонецЕсли;
                        //ПереместитьФайл(ПолученныйФайл.ПолноеИмя, НовыйПутьКФайлу);
                КонецЕсли;
               
                НаборЗаписей = РегистрыСведений.УЭ_ПрикрепленныеФайлы.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор.Документ.Установить(Документ);
                //НаборЗаписей.Отбор.Представление.Установить(Представление);
               
                НаборЗаписей.Прочитать();
                КоличествоЗаписей = НаборЗаписей.Количество();
                ТекПредставление = Представление;
                Если КоличествоЗаписей > 0 Тогда
                    Для Инд = 1 По КоличествоЗаписей Цикл
                        МенеджерЗаписи = РегистрыСведений.УЭ_ПрикрепленныеФайлы.СоздатьМенеджерЗаписи();
                        МенеджерЗаписи.Документ = Документ;
                        МенеджерЗаписи.Представление = Представление;
                        МенеджерЗаписи.Прочитать();
                        Если МенеджерЗаписи.Выбран()Тогда
                            Представление = ТекПредставление+"_"+Строка(Инд);
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
                НаборЗаписей.Очистить();
                НаборЗаписей.Отбор.Документ.Установить(Документ);
                НаборЗаписей.Отбор.Представление.Установить(Представление);

               
                НоваяЗапись = НаборЗаписей.Добавить();
                НоваяЗапись.Документ     = Документ;
                НоваяЗапись.Представление   = Представление;
               
                НоваяЗапись.ИмяФайла     = ИмяФайла;
                НоваяЗапись.Размер         = РазмерФайла;
                НоваяЗапись.Расширение     = Расширение;
                НоваяЗапись.ДатаЗагрузки = ТекущаяДата();
               
                НаборЗаписей.Записать();
               
                ТекСтрока.Загрузить = Ложь;
               
                //привяжем файл к контрагенту
            Исключение
                Отказ = Истина;
                Сообщить(ОписаниеОшибки());
            КонецПопытки;
           
        Иначе
            Сообщить("Ошибка в указании файла");
        КонецЕсли;
       
        Если Отказ Тогда
            ОтменитьТранзакцию();
        Иначе
            ЗафиксироватьТранзакцию();
        КонецЕсли;

    КонецЦикла;
   
    ЭтаФорма.Закрыть();
   
КонецПроцедуры

Функция ПолныйПутьХраненияДляВыгрузки(ИмяФайла, Расширение) Экспорт
    Если Справочники.УЭ_ЗапускБизнесПроцессов.ВыгрузкаЗапросовУТвУПП.Запщен
            И ТекущаяДата() >= Справочники.УЭ_ЗапускБизнесПроцессов.ВыгрузкаЗапросовУТвУПП.ДатаЗапуска
        Тогда
        результат= ?( ТипЗнч(Документ) = Тип("ДокументСсылка.ЗаказПокупателя"),
                Строка(Справочники.ЭР_Константы.ОсновнойКаталогФайловХранениеУТ.Значение),
                Строка(Справочники.ЭР_Константы.ОсновнойКаталогФайловХранение.Значение)) + ИмяФайла + Расширение;
    иначе
        результат = Строка( Справочники.ЭР_Константы.ОсновнойКаталогФайловХранение.Значение) + ИмяФайла + Расширение;
    КонецЕсли;
   
    возврат( результат)
КонецФункции

Процедура КоманднаяПанельДокументВыгрузить(Кнопка)
    ДействияФормыСохранитьИЗакрытьДляВыгрузки(Кнопка);   
КонецПроцедуры

LexaK

в какой-то обработке у меня такая функция, посмотрите может сможете применить в своей задаче

&НаКлиенте
Функция ПолучитьДиалогВыбораФайла(прВидОткрытия=1)

Если прВидОткрытия = 1 Тогда
лкРежимВыбора = РежимДиалогаВыбораФайла.Открытие;
лкЗаголовок = "Открыть файл с запросом.";
лкДействие = "ОткрытьЗапрос";
ИначеЕсли прВидОткрытия = 2 Тогда
лкРежимВыбора = РежимДиалогаВыбораФайла.Сохранение;
лкЗаголовок = "Сохранить запрос в файл.";
лкДействие = "СохранитьЗапрос";
ИначеЕсли прВидОткрытия = 3 Тогда
лкРежимВыбора = РежимДиалогаВыбораФайла.ВыборКаталога;
лкЗаголовок = "Выбрать каталог.";
лкДействие = "ВыбратьКаталог";
КонецЕсли;

Диалог = Новый ДиалогВыбораФайла(лкРежимВыбора);
Диалог.Заголовок  = лкЗаголовок;//"Выберите файл со списком запросов";
Диалог.Фильтр      = "Файлы запросов (*.sel)|*.sel|Все файлы (*.*)|*.*";
Диалог.Расширение = "sel";
Диалог.ПолноеИмяФайла = "Запрос";

лкПараметры = Новый Структура("Событие", лкДействие);
Оповещение = Новый ОписаниеОповещения("ОбработчикОповещения", ЭтаФорма, лкПараметры);
Диалог.Показать(Оповещение);

Возврат Истина;

КонецФункции

в этой функции как раз есть режим выбора каталога.
если помогло нажмите: Спасибо!

Ивашка

Цитата: LexaK от 02 мар 2020, 20:34в этой функции как раз есть режим выбора каталога.
режим выбора каталога у меня уже есть, это не совсем то наверно

LexaK

вы сами себе уже противоречите
Цитироватьно как теперь изменить функцию, чтоб я мог сам указать путь для сохранения?(сейчас там путь указан в константе)
и тут же пишите
Цитироватьрежим выбора каталога у меня уже есть
:xfbnsdfb:
если помогло нажмите: Спасибо!

Ивашка

Цитата: LexaK от 03 мар 2020, 10:50вы сами себе уже противоречите
может я изначально неправильно выразился, прошу прощения, режим диалога у меня работает, но сохраняет файлы куда то не туда, например я хочу чтоб файлы сохранились на рабочем столе, но они туда не сохраняются


LexaK

1.проверьте где происходит сохранение НаКлиенте или НаСервере
2.Используйте отладчик,
3.проверьте журнал сообщений, 1С-ый и системный, иногда просто прав не хватает
если помогло нажмите: Спасибо!

Ивашка

Перебираю в цикле несколько файлов, но сохраняет только последний файл, как исправить, создать массив и туда запихнуть файлы или как?
Если ТЗ.Количество() = 0 Тогда
Сообщить("Нет файлов");
Возврат;
КонецЕсли;

МассивФайлов = Новый Массив;

Для Каждого ТекСтрока из ТЗ Цикл

ПолученныйФайл = Новый Файл(ТекСтрока.ПутьКФайлу);
ИсходныйПутьКФайлу = ПолученныйФайл.ПолноеИмя;

Если НЕ ПолученныйФайл.Существует() Тогда
Сообщить("Файл " + ПолученныйФайл.ПолноеИмя + " не найден!",СтатусСообщения.Важное);
КонецЕсли;
КонецЦикла;

Попытка
ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогСохраненияФайла.ПолноеИмяФайла = ИсходныйПутьКФайлу;
ДиалогСохраненияФайла.Фильтр = ПолучитьФильтрФайлов();
ДиалогСохраненияФайла.Заголовок = "Выберите путь для сохранения";
Если ДиалогСохраненияФайла.Выбрать() Тогда 
НовыйПутьКФайлу = ДиалогСохраненияФайла.ВыбранныеФайлы;
КопироватьФайл(ИсходныйПутьКФайлу, НовыйПутьКФай);
Иначе
ПереместитьФайл(ИсходныйПутьКФайлу, НовыйПутьКФайлу);
КонецЕсли;

Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

ЭтаФорма.Закрыть();

LexaK

так у вас только одно копирование, после цикла, вот переделал ваш код (с сохранением всего Гкода), попробуйте так

    Если ТЗ.Количество() = 0 Тогда
        Сообщить("Нет файлов");
        Возврат;
    КонецЕсли;

//не используется?
    //МассивФайлов = Новый Массив;

    Попытка
        ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
        ДиалогСохраненияФайла.ПолноеИмяФайла = ИсходныйПутьКФайлу;
        ДиалогСохраненияФайла.Фильтр = ПолучитьФильтрФайлов();
        ДиалогСохраненияФайла.Заголовок = "Выберите путь для сохранения";
        Если ДиалогСохраненияФайла.Выбрать() Тогда 
            НовыйПутьКФайлу = ДиалогСохраненияФайла.ВыбранныеФайлы;
//перенесено в цикл
//КопироватьФайл(ИсходныйПутьКФайлу, НовыйПутьКФай);
Иначе
//каталог не выбран, Выходим?
            //ПереместитьФайл(ИсходныйПутьКФайлу, НовыйПутьКФайлу);
Возврат;
        КонецЕсли;
   
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;


    Для Каждого ТекСтрока из ТЗ Цикл

        ПолученныйФайл = Новый Файл(ТекСтрока.ПутьКФайлу);
        ИсходныйПутьКФайлу = ПолученныйФайл.ПолноеИмя;
       
        Если ПолученныйФайл.Существует() Тогда
КопироватьФайл(ИсходныйПутьКФайлу, НовыйПутьКФай);
Иначе
            Сообщить("Файл " + ПолученныйФайл.ПолноеИмя + " не найден!",СтатусСообщения.Важное);
        КонецЕсли;
КонецЦикла;
       
ЭтаФорма.Закрыть();
если помогло нажмите: Спасибо!

Ивашка


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск