|   |   | 
| 
 | Ошибка при вызове конструктора (ДвоичныеДанные), Бухгалтерия 3.0 | ☑ | ||
|---|---|---|---|---|
| 0
    
        Новый1сник2 18.07.22✎ 12:37 | 
        Доброго дня!
 при попытке записать двоичные данные пишет ошибку: {ОбщаяФорма.ПечатьДокументов.Форма(1898)}: Ошибка при вызове конструктора (ДвоичныеДанные) мФайл = Новый ДвоичныеДанные(ПолноеИмяФайла); по причине: Недопустимое значение параметра (параметр номер '1') при этом в УНФ тот же код работает норм. | |||
| 1
    
        Новый1сник2 18.07.22✎ 12:37 | 
        МассивСсылок = Параметры.ПараметрКоманды;
 Если ОбщегоНазначения.ЗначениеСсылочногоТипа(МассивСсылок) Тогда МассивСсылок = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(МассивСсылок); КонецЕсли; ИмяФайла = ИмяТабдок + " " + СокрЛП(СтрЗаменить(МассивСсылок[0].Ссылка, "(не проведен)","")) + ".PDF"; КаталогВременныхФайлов = КаталогВременныхФайлов(); ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременныхФайлов, ИмяФайла); ТабДок.Записать(ПолноеИмяФайла,"PDF"); мФайл = Новый ДвоичныеДанные(ПолноеИмяФайла); | |||
| 2
    
        Новый1сник2 18.07.22✎ 12:38 | 
        ПолноеИмяФайла через отладчик показывает полный путь к файлу, сам файл создается     | |||
| 3
    
        ZDenis 18.07.22✎ 12:48 | 
        (2) "сам файл создается" - где именно в коде? Путь вижу, а создание файла нет     | |||
| 4
    
        ZDenis 18.07.22✎ 12:50 | 
        А тупанул, увидел     | |||
| 5
    
        Новый1сник2 18.07.22✎ 12:51 | 
        (3) я по пути смотрел, файл создается, т.е есть в каталоге     | |||
| 6
    
        Новый1сник2 18.07.22✎ 12:53 | 
        есть варианты, почему ошибку выдает ?     | |||
| 7
    
        ZDenis 18.07.22✎ 12:56 | 
        (6) Вообще должно быть не "ТабДок.Записать(ПолноеИмяФайла,"PDF")"
 а ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.PDF) | |||
| 8
    
        Новый1сник2 18.07.22✎ 13:00 | 
        (7) переписал ТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.PDF), ошибка та же     | |||
| 9
    
        RomanYS 18.07.22✎ 13:08 | 
        (6) Базы обе файловые?     | |||
| 10
    
        Новый1сник2 18.07.22✎ 13:09 | 
        (9) база серверная, но в УНФ работает и в серверном и в файловом варианте     | |||
| 11
    
        Новый1сник2 18.07.22✎ 13:10 | 
        в отладчике такую ошибку пишет:
 Новый ДвоичныеДанные(ПолноеИмяФайла) {<Неизвестный модуль>(1)}: Ошибка при вызове конструктора (ДвоичныеДанные) | |||
| 12
    
        Dmitrii гуру 18.07.22✎ 13:11 | 
        (5) >>  я по пути смотрел, файл создается, т.е есть в каталоге.
 А ты в отладчике посмотри. Что в переменной "ПолноеИмяФайла"? | |||
| 13
    
        Garykom гуру 18.07.22✎ 13:11 | 
        (9) ТабДок.Записать непонятно как отрабатывает для разницы клиент-сервер     | |||
| 14
    
        Новый1сник2 18.07.22✎ 13:12 | 
        (12) ПолноеИмяФайла    "E:\TempUSR1CV8\ЗаказПоставщику Заказ поставщику 000001 от 18.07.2022 13:08:34.PDF"    Строка     | |||
| 15
    
        Garykom гуру 18.07.22✎ 13:13 | 
        (14) попробуй тупую вещь
 замени + ".PDF" на + ".pdf" | |||
| 16
    
        RomanYS 18.07.22✎ 13:13 | 
        вот и ответ. Двоеточие запрещено в именах файла     | |||
| 17
    
        RomanYS 18.07.22✎ 13:14 | 
        +(16) а в УНФ возможно время убрано из представления документа     | |||
| 18
    
        Новый1сник2 18.07.22✎ 13:15 | 
        (17) похоже на то, в унф без времени записывается, сейчас проверю     | |||
| 19
    
        Garykom гуру 18.07.22✎ 13:15 | 
        (16) хмм почему не падает ТабДок.Записать( "E:\TempUSR1CV8\ЗаказПоставщику Заказ поставщику 000001 от 18.07.2022 13:08:34.PDF") ?     | |||
| 20
    
        RomanYS 18.07.22✎ 13:16 | 
        (19) и файл создает?     | |||
| 21
    
        ZDenis 18.07.22✎ 13:16 | 
        (19) + он говорит что файл создается в каталоге     | |||
| 22
    
        Garykom гуру 18.07.22✎ 13:17 | 
        (20) (21) Вот это и интересно ))     | |||
| 23
    
        Garykom гуру 18.07.22✎ 13:19 | 
        И да.
 Запрещенные символы в именах файлов/папок это кстати раздражает с точки зрения логики и удобства. Это же дичайший маразм и архаизм. | |||
| 24
    
        RomanYS 18.07.22✎ 13:19 | 
        (22) тут наверное нужно разбираться с версиями ОС и платформы... только непонятно зачем.     | |||
| 25
    
        Garykom гуру 18.07.22✎ 13:20 | 
        В случае линукс сталкивался с (15), когда расширение по дефолту маленькими буковками и имена файлов регистрозависимы     | |||
| 26
    
        Злопчинский 18.07.22✎ 13:22 | 
        (23) всегда имена файлов нормализовалось перед записью. Ненавижу такие имена как выше у ТС.     | |||
| 27
    
        Новый1сник2 18.07.22✎ 13:27 | 
        (26) а чем не нравится, "ЗаказПоставщику" дублируется, это я поправлю     | |||
| 28
    
        Новый1сник2 18.07.22✎ 13:32 | 
        получилось, проблема была видимо в запрещенных символах.
 благодарю | |||
| 29
    
        Злопчинский 18.07.22✎ 13:34 | 
        Пробелы в имени файла - копрокод
 Точки в имени файла - копрокод Форматзаписи датыф когда по нему нельзя отсортировать файлы по хронологии имени - копрокод*2 . могу ошибаться, конечно, на вкус и цвет как говорится... | |||
| 30
    
        Новый1сник2 18.07.22✎ 13:39 | 
        (29) сейчас выглядит как "Заказ поставщику 00000000001 от 18.07.2022.PDF", чем пробелы и точки помешали ?     | |||
| 31
    
        arsik гуру 18.07.22✎ 13:54 | 
        (0) Зачем нагружать файловую систему? Сейчас такое делается через поток.     | |||
| 32
    
        Mr_Rm 18.07.22✎ 13:57 | 
        (19) Оно не просто не падает, а молча создаёт файл с именем "E:\TempUSR1CV8\ЗаказПоставщику Заказ поставщику 000001 от 18.07.2022 13" - обрезано по двоеточие, без расширения.
 То же самое для объекта ТекстовыйДокумент. Вероятно, так же и для других, имеющих метод Записать. Проверено на 8.3.21.1302. Явный баг. | |||
| 33
    
        Новый1сник2 18.07.22✎ 14:04 | 
        (31) записывается в присоединенные файлы, временные файлы удаляются     | |||
| 34
    
        Kassern 18.07.22✎ 14:13 | 
        (33) Зачем записывать во временные файлы? Откройте СП и почитайте за метод Записать ТД и какие варианты есть там. Далее в том же СП посмотрите метод ЗакрытьИПолучитьДвоичныеДанные() У ПотокаВПамяти.     | |||
| 35
    
        Kassern 18.07.22✎ 14:14 | 
        Все это можно провернуть в оперативке, чтобы дважды к файловой системе не обращаться.     | |||
| 36
    
        Новый1сник2 18.07.22✎ 14:17 | 
        (35) сделано уже, работает быстро. переделывать нет смысла. на будущее почитаю инфу про поток     | |||
| 37
    
        Kassern 18.07.22✎ 14:20 | 
        (36) Если в упрощенно, то как-то так:
 ПотокВПамяти=Новый ПотокВПамяти(); ТабДок.Записать(ПотокВПамяти,"pdf"); ДД=ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные(); | |||
| 38
    
        Garykom гуру 18.07.22✎ 14:27 | 
        (37) Что будет если "pdf" размером больше ram ?     | |||
| 39
    
        Kassern 18.07.22✎ 14:27 | 
        (38) Тогда нужно бежать из этой конторы)     | |||
| 40
    
        Новый1сник2 18.07.22✎ 14:40 | 
        (37) благодарю, сохраню в заметки     | |||
| 41
    
        Сергиус 18.07.22✎ 15:32 | 
        (38)начнет свопить на диск)     | |||
| 42
    
        Garykom гуру 18.07.22✎ 15:42 | 
        (26) Речь о том что нормализация имен файлов это глупость.
 Банальный недостаток/недоработка файловой системы что нельзя любые символы применять. Которое проистекает из древнейших времен наследия CP/M. Например что имена переменных (и процедур/функций) в 1С нельзя начинать с цифры или они не могут содержать некоторых символов тоже атавизм. Как и идиотизм с разделением Структура/Соответствие, которые прекрасно объединяются в одно. Даже обращаться к свойствам можно было бы так Структура."Имя свойства" что равнозначно Структура["Имя свойства"] | |||
| 43
    
        Garykom гуру 18.07.22✎ 15:44 | 
        (42)+ Подумайте. Имена файлов разрешают кириллицу и даже иероглифы. А вот ":" и слеши нельзя. Маразм!     | |||
| 44
    
        Kigo_Kigo 18.07.22✎ 16:26 | 
        (43) Это спец символы, которые используются в том же пути к файлу, что может породить кучу проблем, по этому они тупо запрещены, это разве не очивидно? ничего идиотского я в этом не вижу     | |||
| 45
    
        Garykom гуру 18.07.22✎ 16:36 | 
        (44) 1. ":" только одно после имени диска
 если разрешили "." и только последняя как разделитель имени и расширения а прочие разрешены и относятся к имени кто/что мешает тоже самое сделать с ":"? самое первое после имени диска спецсимвол, прочие относятся к имени файла 2. "/" и "\" прекрасно можно использовать в имени файла, просто автоматически при записи создает подкаталоги и все, при чтении пытается прочитать подкаталог т.е. запись файла "c:\блабла\блабла" создает файл "блабла" в каталоге "блабла" на диске c | |||
| 46
    
        Kassern 18.07.22✎ 16:57 | 
        (45) а если юзвер не хочет создавать папку и он тупо очепятался в имени папки? В вашем случае создастся еще одна и юзвер это не заметит. А если еще и регламент к изначальной папке прикручен?)     | |||
| 47
    
        Kassern 18.07.22✎ 16:58 | 
        в общем, не во всех случаях эта логика правильная, а где-то она вредная. Поэтому это нормальное поведение ОС, если хотите свою, то допишите как вам надо в своей обработке записи.     | |||
| 48
    
        ДедМорроз 18.07.22✎ 23:11 | 
        Двоеточие в имени файла - это имя альтернативного потока данных.
 Оно создается и записывается,а вот при проверке существования будет ошибка. | |||
| 49
    
        Злопчинский 18.07.22✎ 23:16 | 
        (45) в Far так и сделано ;-)     | |||
| 50
    
        ДедМорроз 18.07.22✎ 23:55 | 
        В Linux,например,есть символ исключения \,который позволяет использовать в тмени файла практически любые символы.
 Опять же,файловой системе,по большому счету,не важно,какая строка записана в имени файла. Вопрос тут только в правильности понимания разбиения на составляющие. Ну и в ntfs имена файлов и длина пути до 32768 байт,однако,и вме работает как в 1с,так и в Си,а вот проводник windows,не работает-позор да и только. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |