Имя: Пароль:
1C
1С v8
Ошибка при вызове конструктора (ДвоичныеДанные), Бухгалтерия 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,не работает-позор да и только.