|
Не сохраняется табличный документ во внешний файл .pdf | ☑ | ||
---|---|---|---|---|
0
foxslot
14.10.19
✎
12:47
|
Столкнулся с проблемой: фоновым заданием происходит изменение определенного регистра сведений, в результате этого изменения срабатывает подписка на событие и происходит выгрузка пф платежного поручения в табличный документ и попыткой записать во внешний файл .pdf, при записи вылетает ошибка: "Ошибка при вызове метода контекста (Записать): Ошибка при выполнении файловой операции". Весь экшн в том, что если вызывать эту процедуру вручную (меняя запись в регистре) то все отрабатывает нормально, файлы создаются и записываются. Пользователь через которого запускается фоновое задание с полными правами, запускать вручную тоже пробовал через этого пользователя. Пробовал смоделировать такую же ситуацию на тестовой базе на этом же сервере, как результат все работает нормально, создается и сохраняется при этом ссылается на одни и ту же папку для хранения временных файлов. Помимо этого есть еще обработки, который сохраняют файл .pdf в эту же папку, тем самым исключил отсутствие прав для учетки, через которую запущена служба 1с. Подскажите, что еще может быть, куда копать нужно?
|
|||
1
Ёпрст
14.10.19
✎
13:22
|
на сервере, нет такого пути/каталога, + разрешитьвывод нужно табдоку установить в истина
|
|||
2
Ёпрст
14.10.19
✎
13:23
|
ну и прав нема
|
|||
3
foxslot
14.10.19
✎
13:30
|
(1) путь/каталог проверял, присутствует. По поводу разрешить вывод табдоку проверю
|
|||
4
foxslot
14.10.19
✎
13:32
|
(2) прав для учетки в 1с полные и для пользователя, который указан в службе 1с полные. Тем более как ранее отмечал, что есть другие обработки которые сохраняют файлы .pdf в эту же папку, следовательно проблем с правами быть не должно
|
|||
5
Ёпрст
14.10.19
✎
13:59
|
(4) на компе, где служба сервера запущена, есть эта папка ?
|
|||
6
Glavkomnn
14.10.19
✎
14:00
|
(1) согласен с оратором
|
|||
7
Ёпрст
14.10.19
✎
14:01
|
У табличного дока, свойство ИспользованиеВывода в Разрешить, поставил хоть ?
|
|||
8
foxslot
14.10.19
✎
14:04
|
(5) да есть, даже в отладке проверял
|
|||
9
foxslot
14.10.19
✎
14:06
|
(7) в (3) написал что проверю, но думаю вряд ли, до этого то все работала, код в этой процедуре не меняли
|
|||
10
Ёпрст
14.10.19
✎
14:10
|
(9) чудес то не бывает, либо нет прав, либо нет каталога
|
|||
11
piter3
14.10.19
✎
14:10
|
(9) значит код разный все-таки
|
|||
12
RomanYS
14.10.19
✎
14:20
|
(8) попробуй записать во временный каталог. Поймёшь где проблема: в доступе к ФС или внутри 1С
|
|||
13
foxslot
14.10.19
✎
14:21
|
(10) Каталог существует уверен на 100%, я это дело в первую очередь проверял, причем он задается через стандартную процедуру КаталогВременныхФайлов() + имя файла
//часть кода Для Каждого СтрокаРезультата Из Результат Цикл Индекс = Результат.Индекс(СтрокаРезультата); ПП = масПлатежныеПоручения.Получить(Индекс); ИмяФайлаБезРасширения = СтрокаРезультата.ИмяФайлаПечатнойФормы.Получить(ПП); Если Не ЗначениеЗаполнено(ИмяФайлаБезРасширения) Тогда ИмяФайла = ПолучитьИмяВременногоФайла("pdf"); Иначе ИмяФайла = ИмяФайлаБезРасширения + ".pdf"; КонецЕсли; ИмяФайла = КаталогВременныхФайлов() + ИмяФайла; СтрокаРезультата.ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF); Вложения.Добавить(ИмяФайла); КонецЦикла; // |
|||
14
foxslot
14.10.19
✎
14:25
|
(10) а вот насчет прав не знаю как проверить, просто есть процедуры которые нормально сохраняют и записывают файлы, соответственно не должно быть проблем, но вот думаю может какие то ограничения можно поставить даже если права на эту папку есть
|
|||
15
Ёпрст
14.10.19
✎
14:26
|
(13) неа он у тебя берется отсюда
ИмяФайлаБезРасширения = СтрокаРезультата.ИмяФайлаПечатнойФормы.Получить(ПП); вот его и запиши в ЖР |
|||
16
foxslot
14.10.19
✎
14:27
|
(11) Запускается одна и та же процедура, просто при выполнении фоновым заданием, вылетает ошибка, при ручном запуске (путем изменения записи в регистре чтобы вызвать подписку на событие) все нормально сохраняется. Все это проделывается по одним пользователем с полными правами
|
|||
17
Ёпрст
14.10.19
✎
14:28
|
Ну и ошибка вот в чем:
ты к каталогу еще каталог прибавляешь, ибо ПолучитьИмяВременногоФайла УЖЕ возвращает имя с каталогом |
|||
18
foxslot
14.10.19
✎
14:33
|
(15) нет, же.
ИмяФайлаБезРасширения = СтрокаРезультата.ИмяФайлаПечатнойФормы.Получить(ПП); //тут возвращается имя печатной "Платежное поручение от какой то даты" ИмяФайла = ИмяФайлаБезРасширения + ".pdf"; //далее тут к нему приделывается .pdf => "Платежное поручение от какой то даты.pdf" ИмяФайла = КаталогВременныхФайлов() + ИмяФайла; //а тут уже получается к имени файла приделывается путь к временному каталогу => "....\AppData\Local\Temp\Платежное поручение от какой то даты.pdf" В отладке несколько раз проверял путь все корректно |
|||
19
Ёпрст
14.10.19
✎
14:36
|
(18) еще раз
ИмяФайла = ПолучитьИмяВременногоФайла("pdf"); .... ИмяФайла = КаталогВременныхФайлов() + ИмяФайла; >>>.\AppData\Local\Temp\....\AppData\Local\Temp\Платежное поручение от какой то даты.pdf |
|||
20
Ёпрст
14.10.19
✎
14:36
|
ясен пень, такого пути нет - ошибка
|
|||
21
Euguln
14.10.19
✎
14:36
|
Может уже существует такой файл?
А не в pdf сохраняется? |
|||
22
foxslot
14.10.19
✎
14:37
|
(17) ПолучитьИмяВременногоФайла("pdf") не выполнится так как ИмяФайлаБезРасширения возвращается заполненным и соответсвенно в тот блок не провавливается.
|
|||
23
Ёпрст
14.10.19
✎
14:38
|
(22) с чего такая уверенность ?
|
|||
24
foxslot
14.10.19
✎
14:39
|
(23) в отладке проверял
|
|||
25
Ёпрст
14.10.19
✎
14:39
|
ты это где увидел, что в эту ветку не заходит ? В отладке фонового задания, или где ?
Для проверки, запиши имя файла в журнал регистрации, запусти фоновое и посмотри глазками, если лень запущать отладку фоновых заданий |
|||
26
Ёпрст
14.10.19
✎
14:40
|
ну или тупо, тест на вшивость:
|
|||
27
foxslot
14.10.19
✎
14:42
|
(21) также проверял в отладке через Файл.Существует()
|
|||
28
Ёпрст
14.10.19
✎
14:43
|
(27) проверял именно фоновое задание ? Или поделку под клиентом запускал ?
|
|||
29
foxslot
14.10.19
✎
14:46
|
(25) в отладке отлавливал фоновое задание и проверял, + проверял когда вручную запускал: результат один, проходит по такому же пути по тем же условиям, получает такие же пути каталога, все одинаково что при фоновом, что при явном запуске
|
|||
30
foxslot
14.10.19
✎
14:47
|
(25) давно уже туда запись добавил, по ней и получил текст с ошибкой
|
|||
31
foxslot
14.10.19
✎
14:48
|
(26) зачем это делать если я итак вижу что он не проваливается в это условие и я явно вижу что путь корректный?
|
|||
32
foxslot
14.10.19
✎
14:49
|
(28) что за "подделка под клиентом"?
|
|||
33
Ёпрст
14.10.19
✎
15:08
|
(31) там же написано - тест на вшивость
Вот так воткни еще СтрокаРезультата.ТабличныйДокумент.Вывод = ИспользованиеВывода.Разрешить |
|||
34
Ёпрст
14.10.19
✎
15:09
|
и.. тебе веры нет, раз код изначально содержит ошибку
|
|||
35
hhhh
14.10.19
✎
15:59
|
(30) но точно есть права на запись у пользователя usr1cv8 к этой папке ....\usr1cv8\AppData\Local\Temp\ ?? Что-то сомнительно.
|
|||
36
RomanYS
14.10.19
✎
16:39
|
(35) С чего вдруг собственный пользовательский темп должен быть не доступен?
|
|||
37
hhhh
14.10.19
✎
16:45
|
(36) ну у меня было много раз в windows, особенно на Висте помню. Если жмакаешь на рабочем столе Мои документы, то всё доступно. А если последовально идешь C:\Document and settings\user\Мои документы, то хрен там.
|
|||
38
foxslot
14.10.19
✎
17:35
|
(33) не помогло
(34) это говнокод программистов одной из известных франчей, и если бы эта ошибка воспроизводилась, то уж извини, я не до такой степени слепой чтобы не заметить что с путь/каталог дублируется, тем более я не один день уже сижу с этой проблемой. Моя задача сейчас найти причину ошибки, а не сидеть и анализировать чей то код, который даже не участвует в процессе выполнения программы |
|||
39
foxslot
14.10.19
✎
17:38
|
(35) при выполнении других похожих обработок в этой же базе файлы записываются туда, следовательно права есть. Просто почему при разных запусках (через фоновое или явный запуск) через одного пользователя результаты разные
|
|||
40
hhhh
14.10.19
✎
17:50
|
(39) может быть несколько вариантов:
1. пишешь 2 файла под одним именем 2. пишешь один файл одновременно 2 раза 3. запускаешь одновременно 2 регзадания, которые пишут один и тот же файл. То есть одно регзадание не закончилось, а другое уже стартовало. 4. может архивируешь этот файл? тогда может быть файл еще не полностью записался, а архивирование началось. 5. может у тебя в windows этот файл открыт на чтение, или в акробате, кем-то занят, тогда 1с не может сохранить. |
|||
41
hhhh
14.10.19
✎
17:52
|
(39) да, еще может 2 базы. Например ты на тестовой смотришь, а в это же время регзадание запускается и на рабочей базе.
|
|||
42
foxslot
14.10.19
✎
18:09
|
(40) Спасибо за направление, проверю по этим пунктам
|
|||
43
Ёпрст
14.10.19
✎
18:14
|
(38) ну, тест на вшивость сделал с именем файла ?
Точно всё лишнее закоментил ? |
|||
44
foxslot
15.10.19
✎
09:22
|
(43) проделал, заодно проверил (12) как итог файлы записываются
https://imgur.com/a/OewhXJk только все равно не понятно, почему если явно задавать имя файлу, то не сохраняет. В отладке на точке останова перед выполнением этой записи в параллельно запущенном предприятии с помощью специально написанной обработки проверял наличие этого файла по пути, по которому должно пройти сохранение. При этом ради интереса добавлял вручную файл с таким же именем, то там выходила другая ошибка, явно указывала что файл с таким же именем существует при этом запуская фоновое задание под тем же пользователем вручную все норм сохраняет, на тип сеанса чтоли какие то ограничения могут стоять? |
|||
45
foxslot
15.10.19
✎
09:24
|
еще предложили вариант создавать вместо КаталогВременныхФайлов() использовать ПолучитьИмяВременногоФайла() и в результате будет создаваться файл с расширением .tmp и тогда уже путь хранения будет выглядеть так "C:\Users\s-1cserviceuser\AppData\Local\Temp\v8_F58_129.tmp\Платежное поручение № 92376 от 10 октября 2019 г.pdf". Проверил, вроде как работает, но насколько это правильно и будут ли потом последствия в виде засора файлами или они будут нормально удалятся как временный файлы?
|
|||
46
Ёпрст
15.10.19
✎
09:45
|
(44) ответ же очевиден, не ?
Не надо прибавлять каталог к каталогу в имени файла |
|||
47
Мимохожий Однако
15.10.19
✎
10:13
|
(45) Если не уверен, что файл будет удалён, то удаляй принудительно через некоторое время.
|
|||
48
foxslot
15.10.19
✎
10:42
|
(46) Да почему каталог к каталогу то?
вот это при запуске через фоновое задание, выдает ошибку https://imgur.com/a/nAHcAiz Текст ошибки: Ошибка при вызове метода контекста (Записать) СтрокаРезультата.ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF); по причине: Ошибка при выполнении файловой операции 'C:\Users\s-1cserviceuser\AppData\Local\Temp\Платежное поручение № 31189 от 10 октября 2019 г.pdf' вот при явном запуске, все нормально сохраняет https://imgur.com/a/AtX3p3B по информации из табло все видно что пути одинаковы и никакого каталога к каталогу нет и по наличию условию та ветка с получением имени временного файла никак не выполняется |
|||
49
hhhh
15.10.19
✎
10:57
|
(48) проверь, может ИмяФайла повторяется в следующей строчке СтрокаРезультата. Может один и тот же файл много раз записываешь.
|
|||
50
foxslot
15.10.19
✎
14:18
|
(49) не, там принцип такой что в Результат по которому проходит цикл попадает массив печатных плат где каждой из соответствует один документ платежного поручения, и уникальность проверяется на уровне уникальности самого документа, а название собирается из номера и даты платежного документа, одинаковые платежки в массив не могут попасть. И опять таки там стоит проверка наличие файла по пути, по которому будет записан файл
|
|||
51
foxslot
15.10.19
✎
14:18
|
(50) *массив печатных форм
|
|||
52
hhhh
15.10.19
✎
14:28
|
(51) ну вот это
Индекс = Результат.Индекс(СтрокаРезультата); ПП = масПлатежныеПоручения.Получить(Индекс); ИмяФайлаБезРасширения = СтрокаРезультата.ИмяФайлаПечатнойФормы.Получить(ПП); вообще непонятно ИмяФайлаБезРасширения = СтрокаРезультата.ИмяФайлаПечатнойФормы.Получить(ПП); ПП - это элемент массива. То есть у вас масПлатежныеПоручения - там индексы хранятся? Зачем такая суперсложная структура? |
|||
53
Ёпрст
15.10.19
✎
14:35
|
(48) ну давай.. тест на вшивость №2 :
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |