|
Ошибка при вызове конструктора (ДвоичныеДанные), Бухгалтерия 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,не работает-позор да и только. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |