| 
    
            
         
         | 
    
  | 
Добавление файла и проверка. ДО 3.0 | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Nezna    
     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    
     23.08.24 
            ✎
    13:41 
 | 
         
        Я это и описал, можно поточнее?     
         | 
|||
| 
    3
    
        Волшебник    
     23.08.24 
            ✎
    13:42 
 | 
         
        (2) Если сообщите текст ошибки, то можно и поточнее.     
         | 
|||
| 
    4
    
        Nezna    
     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    
     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    
     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    
     23.08.24 
            ✎
    14:27 
 | 
         
        (10) после выполнения этой строки, в файловой системе появляется временный файл, содержащий PDF-документ. Я его могу уже просмотреть.     
         | 
|||
| 
    12
    
        Nezna    
     23.08.24 
            ✎
    14:46 
 | 
         
        (9) При поиске существующего файла , файл находится,  если есть  ,наверное,  все хватает.
 
        Права тоже есть.  | 
|||
| 
    13
    
        maxab72    
     23.08.24 
            ✎
    15:28 
 | 
         
        (12) а откуда тогда  ДвоичныеДанные = неопределенно?     
         | 
|||
| 
    14
    
        Nezna    
     23.08.24 
            ✎
    16:43 
 | 
         
        (13) непонятно, только после добавления строки СуществующийPDF = РаботаСФайламиВызовСервера.НайтиФайлыПоПолнымИменамСРасширением(ДанныеФайловДляПоиска, ВладелецФайла); становится неопределенно. Без нее все отлично.     
         | 
|||
| 
    15
    
        lubitelxml    
     23.08.24 
            ✎
    17:27 
 | 
         
        (14) НайтиФайлыПоПолнымИменамСРасширением - смотрите что там в процедуре, я делал обмен файлами между БД - писал сам поиск - изменился файл или нет - по дате изменения и по размеру, и перезаписывал его, если нужно     
         | 
|||
| 
    16
    
        Nezna    
     26.08.24 
            ✎
    13:20 
 | 
         
        Может кому пригодится.
 
        Создал свою функцию по поиску файла, не помогло. Добавил новую процедуру на сервере, после “СведенияОФайле” где вставил поиск файла и затем обновление или создание файла по условию. Все работает.  | 
|||
| 
    17
    
        Волшебник    
     26.08.24 
            ✎
    13:21 
 | 
         
        (16) Ну, с почином!     
         | 
|||
| 
    18
    
        Nezna    
     26.08.24 
            ✎
    13:23 
 | 
         
        Спасибо!     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |