Имя: Пароль:
1C
1С v8
Копирование файлов с клиента на сервер
0 Pol1C
 
27.08.21
11:26
Добрый день
Помещаю файлы во временное хранилище через НачатьПомещениеФайловНаСервер
Далее сохраняю их
&НаСервере
Функция ЗаписатьНаСервере(АдресХранилища, ЛокальныйАдресКаталога, ИмяФайла, РасширениеФайла);
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
    Попытка    
        СоздатьКаталог(ЛокальныйАдресКаталога);
        ДвоичныеДанные.Записать(ЛокальныйАдресКаталога + ИмяФайла + "." + РасширениеФайла);
        
        УдалитьИзВременногоХранилища(АдресХранилища);
    Исключение        
        ЗаписьЖурналаРегистрации("Запись файла на сервере.", УровеньЖурналаРегистрации.Ошибка, , ,ОписаниеОшибки());
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
    КонецПопытки;    
КонецФункции

В тонком клиенте все работает, но в web-клиенте нет и ошибки не выдает.
1 ДенисЧ
 
27.08.21
11:34
А расширение для работы с файлами установил для веб-клиента?
2 Pol1C
 
27.08.21
11:40
(1) Да
3 Garykom
 
гуру
27.08.21
11:44
браузер перезапусти
4 Pol1C
 
27.08.21
11:57
(3) Не помогло
веб-клиент работает удаленно через vpn
5 Pol1C
 
30.08.21
10:42
Подниму разок
6 lodger
 
30.08.21
11:29
(2) НачатьПодключениеРасширенияРаботыСФайлами дергал?
7 Pol1C
 
30.08.21
12:44
(6) &НаКлиенте
Процедура СписокФайловФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ОповещениеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект));
КонецПроцедуры

&НаКлиенте
Процедура ОповещениеПодключенияРасширенияРаботыСФайлами(Подключено, ДополнительныеПараметры) Экспорт
    
    Если Подключено Тогда
        ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ДиалогОткрытия.ПолноеИмяФайла = "";
        Фильтр = "Файл (*.pdf;*.jpg;*.jpeg;*.tif)|*.pdf;*.jpg;*.jpeg;*.tif|";
        ДиалогОткрытия.Фильтр = Фильтр;
        ДиалогОткрытия.МножественныйВыбор = Ложь;
        ДиалогОткрытия.Заголовок = "Выберите файлы";
        ДиалогОткрытия.Показать(Новый ОписаниеОповещения("ОповещениеВыборФайла", ЭтотОбъект));
    Иначе
        Сообщить("Не подключено расширение для работы с файлами!!");
    КонецЕсли;
КонецПроцедуры
8 lodger
 
30.08.21
13:29
(7) ну если тебе западло сразу весь код работы с файлами выкладывать...
давайте теперь посмотрим, как ты наполнил ОписанияПередаваемыхФайлов
9 Pol1C
 
30.08.21
13:47
(8) Сорри

&НаКлиенте
Процедура СписокФайловФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    НачатьПодключениеРасширенияРаботыСФайлами(Новый ОписаниеОповещения("ОповещениеПодключенияРасширенияРаботыСФайлами", ЭтотОбъект));
КонецПроцедуры

// Процедура прикрепления файлов к документу
&НаКлиенте
Процедура ОповещениеПодключенияРасширенияРаботыСФайлами(Подключено, ДополнительныеПараметры) Экспорт
    
    Если Подключено Тогда
        ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        ДиалогОткрытия.ПолноеИмяФайла = "";
        Фильтр = "Файл (*.pdf;*.jpg;*.jpeg;*.tif)|*.pdf;*.jpg;*.jpeg;*.tif|";
        ДиалогОткрытия.Фильтр = Фильтр;
        ДиалогОткрытия.МножественныйВыбор = Ложь;
        ДиалогОткрытия.Заголовок = "Выберите файлы";
        ДиалогОткрытия.Показать(Новый ОписаниеОповещения("ОповещениеВыборФайла", ЭтотОбъект));
    Иначе
        Сообщить("Не подключено расширение для работы с файлами!!");
    КонецЕсли;
КонецПроцедуры

// Процедура прикрепления файлов к документу
&НаКлиенте
Процедура ОповещениеВыборФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
        Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда
            ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.Файл = ВыбранныеФайлы[0];
            ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.ПутьКФайлуВХранилище = ИмяСерверноФайлов(ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.Файл, ЭтотОбъект);
            ЭтотОбъект.ТекущийЭлемент.ТекущиеДанные.ПризнакРедактирования = Истина;
            ЭтаФорма.Модифицированность = Истина;
        Иначе
            Сообщить("Нет выбранных файлов!");
        КонецЕсли;
КонецПроцедуры

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


&НаКлиенте
Процедура ЗагрузитьЗавершение(ОписаниеФайла, ДопПараметры) Экспорт
    Для Каждого Строка Из ОписаниеФайла Цикл
        Для Каждого ТекСтрока Из ЭтотОбъект.Объект.СписокФайлов Цикл
            Если Строка.СсылкаНаФайл.Файл.ПолноеИмя = ТекСтрока.Файл Тогда
                ПолноеИмяФайла = Сред(ТекСтрока.ПутьКФайлуВХранилище, СтрНайти(ТекСтрока.ПутьКФайлуВХранилище, "\", НаправлениеПоиска.СКонца)+1);
                ИмяФайла = Лев(ПолноеИмяФайла, Найти(ПолноеИмяФайла, ".")-1);
                РасширениеФайла = Сред(ПолноеИмяФайла, Найти(ПолноеИмяФайла, ".")+1);
                ЛокальныйАдресКаталога = Лев(ТекСтрока.ПутьКФайлуВХранилище, СтрНайти(ТекСтрока.ПутьКФайлуВХранилище, "\", НаправлениеПоиска.СКонца));
            КонецЕсли;
        КонецЦикла;
        ЗаписатьНаСервере(Строка.Адрес, ЛокальныйАдресКаталога, ИмяФайла, РасширениеФайла);
    КонецЦикла;
КонецПроцедуры    


&НаСервере
Функция ЗаписатьНаСервере(АдресХранилища, ЛокальныйАдресКаталога, ИмяФайла, РасширениеФайла);
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
    Попытка    
        СоздатьКаталог(ЛокальныйАдресКаталога);
        ДвоичныеДанные.Записать(ЛокальныйАдресКаталога + ИмяФайла + "." + РасширениеФайла);
        УдалитьИзВременногоХранилища(АдресХранилища);
    Исключение        
        ЗаписьЖурналаРегистрации("Запись файла на сервере.", УровеньЖурналаРегистрации.Ошибка, , ,ОписаниеОшибки());
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки());
    КонецПопытки;    
КонецФункции
10 lodger
 
30.08.21
14:33
попробуй вместо
Идентификатор  = Новый УникальныйИдентификатор

передать ничего или ЭтотОбъект.УникальныйИдентификатор;
11 Pol1C
 
31.08.21
10:50
(10) Не помогло
12 Вафель
 
31.08.21
10:54
попробуй через одиночный файл
НачатьПомещениеФайлаНаСервер
вроде как не требуется для этого расширение
13 lodger
 
31.08.21
10:55
(11) после (12) попробуй по кнопке помещать файл, а не в ПередЗаписью.
14 Вафель
 
31.08.21
10:56
Только если с выбором файла сразу
НачатьПомещениеФайлаНаСервер(<ОписаниеОповещенияОЗавершении>, <ОписаниеОповещенияОХодеВыполнения>, <ОписаниеОповещенияПередНачалом>, <Адрес>, <ПараметрыДиалога>, <УникальныйИдентификаторФормы>)
15 Pol1C
 
31.08.21
16:05
(13) Ты прав, по кнопке все заработало.
Всем спасибо за помощь.
Буду думать как лучше исправить
16 lodger
 
01.09.21
09:21
(15) делаем вывод - недокументированная фича.
НачатьПомещениеФайлаНаСервер не работает в процедуре ПередЗаписью в веб-клиенте.
или наоборот:
НачатьПомещениеФайлаНаСервер какого-то хрена работает в процедуре ПередЗаписью в тонком-клиенте.
17 Garykom
 
гуру
01.09.21
09:31
(16) баг это а не фича
18 ДенисЧ
 
01.09.21
09:43
(17) В (16) это продокументировано. Значит, фича.
19 Garykom
 
гуру
01.09.21
09:51
(18) Это когда Миста стала официальным ресурсом фирмы 1С?
20 sikuda
 
01.09.21
09:59
НачатьПомещениеФайлаНаСервер - устаревший метод, тестируем ПоместитьФайлНаСерверАсинх
21 ДенисЧ
 
01.09.21
10:00
(19) А когда перестала? )))
22 sikuda
 
01.09.21
10:03
ПоместитьФайл - Не рекомендуется использовать, начиная с версии 8.3.13.
НачатьПомещениеФайла - Не рекомендуется использовать, начиная с версии 8.3.15.
НачатьПомещениеФайлаНаСервер - Не рекомендуется использовать, начиная ...
Ваши ставки господа.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.