Имя: Пароль:
1C
 
Добавление файла и проверка. ДО 3.0
,
0 Nezna
 
naïve
23.08.24
13:15
В конфигурации я обрабатываю файл, преобразовываю его в PDF и добавляю в карточку документа. Получаю двоичные данные файла и сведения о нем. Все работает, но требуется, чтобы файл не создавался каждый раз заново, а обновлялась его версия. Код работает, но при попытке добавить "существующийPDF" возникает ошибка, в любом случае если файл найден или нет.

// Получаем файл для визуализации
ПолучаемФайлСЭП = РаботаСФайламиВызовСервера.ПолучитьФайлВизуализации(ТекущиеДанные.Ссылка, УникальныйИдентификатор, Истина, Истина);

// Создаем временный PDF-файл
FilePDFDest = ПолучитьИмяВременногоФайла("pdf");

// Получаем двоичные данные исходного PDF-файла
ДвоичныеДанныеPDF = РаботаСФайламиВызовСервера.ПолучитьДвоичныеДанныеФайла(ПолучаемФайлСЭП);

// Записываем данные во временный файл
ДвоичныеДанныеPDF.Записать(FilePDFDest);    

// Создаем двоичные данные текста
ДвоичныеДанныеТекста = Новый ДвоичныеДанные(FilePDFDest);

// Получаем сведения о файле
СведенияОФайле = РаботаСФайламиКлиентСервер.СведенияОФайле("ФайлСВерсией", Новый Файл(FilePDFDest));  
СведенияОФайле.АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеPDF);
СведенияОФайле.АдресВременногоХранилищаТекста = ПоместитьВоВременноеХранилище(ДвоичныеДанныеТекста);

// Формируем данные для поиска существующего файла
ДанныеФайловДляПоиска = Новый Массив;

СтруктураДанных = Новый Структура;    
СтруктураДанных.Вставить("ПолноеНаименование", СведенияОФайле.ИмяБезРасширения);
СтруктураДанных.Вставить("ТекущаяВерсияРасширение", СведенияОФайле.РасширениеБезТочки);

ДанныеФайловДляПоиска.Добавить(СтруктураДанных);

// Ищем существующий PDF
СуществующийPDF = РаботаСФайламиВызовСервера.НайтиФайлыПоПолнымИменамСРасширением(ДанныеФайловДляПоиска, ВладелецФайла);

Если СуществующийPDF <> Неопределено Тогда
    // Обновляем версию существующего файла
  
Иначе
    // Создаем новый файл
    НовыйФайлPDF = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(ВладелецФайла, СведенияОФайле);
КонецЕсли;

Подскажите варианты.
1 Волшебник
 
23.08.24
13:37
>> при попытке добавить "существующийPDF" возникает ошибка

Исправьте ошибку
2 Nezna
 
naïve
23.08.24
13:41
Я это и описал, можно поточнее?
3 Волшебник
 
23.08.24
13:42
(2) Если сообщите текст ошибки, то можно и поточнее.
4 Nezna
 
naïve
23.08.24
13:50
(3) Ошибка
1 вариант

Не удалось добавить файл ни в один из томов! Список ошибок:

Ошибка при добавлении файла "План работ по подразделению 08908999.pdf"
в том "Том1" (/home/usr1cv8/DOC/):
"Неверный тип данных для добавления на том
{ОбщийМодуль.ФайловыеФункции.Модуль(1289)}:ВызватьИсключение(СтрокаИсключения);
{ОбщийМодуль.ФайловыеФункции.Модуль(1392)}:КодВозврата = ДобавитьНаДискСУказаниемДлиныИмени(
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(1128)}:ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом,
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(3822)}:Версия = СоздатьВерсию(ФайлСсылка, СведенияОФайле);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка]".
{ОбщийМодуль.ФайловыеФункции.Модуль(1462)}:ВызватьИсключение(СтрокаИсключения);
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(1128)}:ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом,
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(3822)}:Версия = СоздатьВерсию(ФайлСсылка, СведенияОФайле);
{ОДК Справочник.ДокументыПредприятия.Форма.ФормаЭлемента.Форма(397)}:НовыйФайлPDF = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(ВладелецФайла, СведенияОФайле);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка]


2 вариант
Значение не является значением объектного типа (Размер)
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(1106)}:Версия.Размер = ДвоичныеДанные.Размер();
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(3822)}:Версия = СоздатьВерсию(ФайлСсылка, СведенияОФайле);
{ОбщийМодуль.РаботаСФайлами.Модуль(1562)}:Возврат РаботаСФайламиВызовСервера.СоздатьФайлСВерсией(ВладелецФайлов, СведенияОФайле);
{ОДК Справочник.ДокументыПредприятия.Форма.ФормаЭлемента.Форма(493)}:ДобавитьФайлNEW= РаботаСФайлами.ДобавитьФайл(ПараметрыФайла,ВременногоХранилища,АдресВременногоХранилищаТекста,описание,НоваяСсылкаНаФайл);
{ОДК Справочник.ДокументыПредприятия.Форма.ФормаЭлемента.Форма(401)}:ДобавляемФайлВкарточку(ВладелецФайла,СведенияОФайле,ДвоичныеДанныеPDF);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]
5 Nezna
 
naïve
23.08.24
13:59
Странно, что без проверки на “существующийPDF” файлы создаются без проблем. Метод СуществующийPDF возвращает соответствие, и записи либо есть, либо их нет. Как это может мешать созданию нового файла?
6 spiller26
 
23.08.24
14:00
(4) Смотри права
7 maxab72
 
23.08.24
14:00
(5) А что говорит отладчик?
8 Nezna
 
naïve
23.08.24
14:07
По отладчику, при создании файла («новый файлPDF»),  
В функции ДобавитьФайл ,     ДвоичныеДанные = неопределенно, а если без условия на существующийpdf данные появляются .
  
     ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище); // ДвоичныеДанные
9 maxab72
 
23.08.24
14:15
(8) Можно предположить, что для поиска существующего файла чего-то не хватает. Или тип данных задается не тот, или прав нет.
10 spiller26
 
23.08.24
14:21
(8) Вот тут вы получаете что?
// Записываем данные во временный файл
ДвоичныеДанныеPDF.Записать(FilePDFDest);
11 Nezna
 
naïve
23.08.24
14:27
(10) после выполнения этой строки, в файловой системе появляется временный файл, содержащий PDF-документ. Я его могу уже просмотреть.
12 Nezna
 
naïve
23.08.24
14:46
(9) При поиске существующего файла , файл находится,  если есть  ,наверное,  все хватает.
Права тоже есть.
13 maxab72
 
23.08.24
15:28
(12) а откуда тогда  ДвоичныеДанные = неопределенно?
14 Nezna
 
naïve
23.08.24
16:43
(13) непонятно, только после добавления строки СуществующийPDF = РаботаСФайламиВызовСервера.НайтиФайлыПоПолнымИменамСРасширением(ДанныеФайловДляПоиска, ВладелецФайла); становится неопределенно. Без нее все отлично.
15 lubitelxml
 
23.08.24
17:27
(14) НайтиФайлыПоПолнымИменамСРасширением - смотрите что там в процедуре, я делал обмен файлами между БД - писал сам поиск - изменился файл или нет - по дате изменения и по размеру, и перезаписывал его, если нужно
16 Nezna
 
naïve
26.08.24
13:20
Может кому пригодится.
Создал свою функцию по поиску файла, не помогло.
Добавил  новую процедуру на сервере, после “СведенияОФайле” где вставил поиск файла и затем обновление или создание файла по условию. Все работает.
17 Волшебник
 
26.08.24
13:21
(16) Ну, с почином!
18 Nezna
 
naïve
26.08.24
13:23
Спасибо!