|
Ошибка при выполнении файловой операции | ☑ | ||
---|---|---|---|---|
0
zoran
09.06.21
✎
15:35
|
Приветствую, уважаемые форумчане.
Поделитесь, пожалуйста, опытом, может кто сталкивался. Из-за чего может возникать ошибка: "Ошибка при выполнении файловой операции 'C:\Users\USR1CV8\AppData\Local\Temp\v8_1BF4_352.mxl'". Ошибка происходит при попытке открыть элемент справочника. Ошибка не постоянная, может появиться, а может и нет. База на SQL. Сервер виртуальный. Очень напрягает такая ситуация, особенно, если непонятная причина. |
|||
1
mikecool
09.06.21
✎
15:37
|
смотри, что у тебя при открытии происходит, видимо коряво отчет формируется
|
|||
2
zoran
10.06.21
✎
11:05
|
(1) При открытии нашел место кода, где пишется в этот временный файл. Но проблема то несколько в ином, в том, что в один момент времени все без ошибок, а в другой момент времени выдает эту ошибку. Вот и хотим понять, на чьей стороне ошибка: диск виноват (хоть и виртуальный), права на каталог "тупят" (хотя всем дали полные) или что-то другое, неизвестное пока. Может был у кого прецедент и выяснили причину?
|
|||
3
1Сергей
10.06.21
✎
12:56
|
(2) Места хватает на сервере?
|
|||
4
zoran
10.06.21
✎
13:03
|
(3) Не зависит особо от этого. Бывает достаточно места, бывает мало остается, но ошибка в обоих случаях может появляться. Да и файл этот совсем небольшого размера же, для него уж места предостаточно.
|
|||
5
Kassern
10.06.21
✎
13:04
|
(0) может файл занят а с ним какие то манипуляции хотите сделать. Когда он не занят, то работает, когда не успевает его освободить, тогда ошибку ловите.
|
|||
6
zoran
10.06.21
✎
13:06
|
(5) Так он вроде только при данном событии создается (при открытии элемента справочника, в смысле), а затем тут же удаляется.
|
|||
7
1Сергей
10.06.21
✎
13:08
|
(6) всегда с одним и тем же именем? А если двое отчет откроют?
|
|||
8
ДенисЧ
10.06.21
✎
13:10
|
(7) Видно же, что это временный файл...
|
|||
9
Kassern
10.06.21
✎
13:11
|
(6) ругается при создании, или при удалении?
|
|||
10
Kassern
10.06.21
✎
13:13
|
(6) если не секрет, для чего вы временный файл создаете, что там такого специфического, чего нельзя во временное хранилище пихнуть?
|
|||
11
zoran
10.06.21
✎
13:25
|
(7) Разный
|
|||
12
zoran
10.06.21
✎
13:26
|
(9) Пишет, что при вызове Write
|
|||
13
zoran
10.06.21
✎
13:27
|
(10) Конфигурация специализированная, 1С Отель. Разработчики так сделали
|
|||
14
Kassern
10.06.21
✎
13:29
|
(13) а что на это говорят разработчики этого чудо решения?
|
|||
15
Kassern
10.06.21
✎
13:32
|
(12) если код не большой, где этот временный файл создается, пишется и удаляется, то можете сюда кусок скинуть, либо на пастебин ссылкой. Возможно там где-нить в коде косяк.
|
|||
16
zoran
10.06.21
✎
13:58
|
(14) Отмалчиваются
|
|||
17
zoran
10.06.21
✎
13:58
|
(15)
Function cmGetAbsoluteColor(pColor) Export If pColor.Type = ColorType.Absolute Then Return pColor; EndIf; vSD = New SpreadsheetDocument; vSD.Area("R1C1").BackColor = pColor; vTF = GetTempFileName("mxl"); vSD.Write(vTF, SpreadsheetDocumentFileType.MXL7); vSD.Read(vTF); vColor = vSD.Area("R1C1").BackColor; vSD = Undefined; DeleteFiles(vTF); Return vColor; EndFunction |
|||
18
1Сергей
10.06.21
✎
13:59
|
(17) расстрелять!
|
|||
19
Kassern
10.06.21
✎
14:11
|
(17) И это все, для того чтобы вернуть цвет ячейки... Может у вас ошибка каждый раз когда pColor.Type <> ColorType.Absolute?
|
|||
20
DrZombi
гуру
10.06.21
✎
14:18
|
(0) Предлагаю, не писать этот файл ;)
|
|||
21
DrZombi
гуру
10.06.21
✎
14:21
|
(17) Этот ужас, где пишется?
На клиенте или Сервере? |
|||
22
1Сергей
10.06.21
✎
14:23
|
(15)
Function cmGetAbsoluteColor(pColor) Export //If pColor.Type = ColorType.Absolute Then // Return pColor; //EndIf; //vSD = New SpreadsheetDocument; //vSD.Area("R1C1").BackColor = pColor; //vTF = GetTempFileName("mxl"); //vSD.Write(vTF, SpreadsheetDocumentFileType.MXL7); //vSD.Read(vTF); //vColor = vSD.Area("R1C1").BackColor; //vSD = Undefined; //DeleteFiles(vTF); //Return vColor; Возврат Новый Цвет(255, 255, 255); EndFunction С Вас сто рублёв |
|||
23
1Сергей
10.06.21
✎
14:23
|
(22) -> (17)
|
|||
24
zoran
10.06.21
✎
14:30
|
(19) Проверил в отладчике. Когда не равен, проскакивает без ошибок.
|
|||
25
Kassern
10.06.21
✎
14:32
|
(23) New Color() же)
|
|||
26
zoran
10.06.21
✎
14:32
|
(21) Это в общем модуле, на сервере
|
|||
27
1Сергей
10.06.21
✎
14:36
|
(25) не скрепно
|
|||
28
DrZombi
гуру
10.06.21
✎
14:39
|
(0) Ну народ, уже давно не пишут, все через память :)))
&НаСервере Function cmGetAbsoluteColor(pColor) Export If pColor.Вид = ВидЦвета.Абсолютный Then Return pColor; EndIf; Поток = Новый ПотокВПамяти(); vSD = Новый ТабличныйДокумент; vSD.Область("R1C1").ЦветФона = pColor; vTF = ПолучитьИмяВременногоФайла ("mxl"); vSD.Записать(Поток, ТипФайлаТабличногоДокумента.MXL7); Поток.Перейти(0,ПозицияВПотоке.Начало); vSD.Прочитать(Поток, СпособЧтенияЗначенийТабличногоДокумента.Значение); vColor = vSD.Область("R1C1").BackColor; vSD = Неопределено; //УдалитьФайлы(vTF); Return vColor; EndFunction |
|||
29
DrZombi
гуру
10.06.21
✎
14:39
|
+(28) Ну поток уж сам закроешь ;)
|
|||
30
DrZombi
гуру
10.06.21
✎
14:40
|
+ (0) Вот получше так...
&НаСервере Function cmGetAbsoluteColor(pColor) Export If pColor.Вид = ВидЦвета.Абсолютный Then Return pColor; EndIf; Поток = Новый ПотокВПамяти(); vSD = Новый ТабличныйДокумент; vSD.Область("R1C1").ЦветФона = pColor; vSD.Записать(Поток, ТипФайлаТабличногоДокумента.MXL7); Поток.Перейти(0,ПозицияВПотоке.Начало); vSD.Прочитать(Поток, СпособЧтенияЗначенийТабличногоДокумента.Значение); vColor = vSD.Область("R1C1").BackColor; Поток.Закрыть(); Поток = Неопределено; vSD = Неопределено; //УдалитьФайлы(vTF); Return vColor; EndFunction |
|||
31
Kassern
10.06.21
✎
14:42
|
(29) ну это ладно, что mxl, а если бы xlsx был то в потоке уже так просто табдок не прочитаешь...
|
|||
32
DrZombi
гуру
10.06.21
✎
14:43
|
(31) У нас не ексель :)
|
|||
33
DrZombi
гуру
10.06.21
✎
14:43
|
+ Вот будет ексель, тогда и поговорим про скорость :)
|
|||
34
Kassern
10.06.21
✎
14:44
|
(33) я одного понять не могу, чем создателей webцвета не устроили или различные типовые стили?
|
|||
35
DrZombi
гуру
10.06.21
✎
14:45
|
(34) Ненаю, где там это используется, я вот еще не пойму, нак-зачемой по англиски писать :)
|
|||
36
DrZombi
гуру
10.06.21
✎
14:46
|
+ Потом даже модифицировать не могут :)
|
|||
37
Kassern
10.06.21
✎
14:47
|
(35) может у индусов заказывали конфу?))
|
|||
38
zoran
10.06.21
✎
14:47
|
(35) Там вся конфа такая. Специально похоже, чтобы сложнее было понять, что они там разработали)
|
|||
39
DrZombi
гуру
10.06.21
✎
14:51
|
(38) Соболезную, держи пример, не мучайся хоть со справочником :)
|
|||
40
zoran
10.06.21
✎
14:53
|
Кстати, не только mxl пишут. Есть внешний ресурс Travelline, к которому 1С коненктится, забирает инфу и создает брони в 1С. При этом так же периодически ошибки вываливаются такого типа: "Failed to create reservation: Ошибка при выполнении файловой операции 'C:\Users\USR1CV8\AppData\Local\Temp\Бронь_9719.pdf'; Booking №:20210613-19260-96172841".
|
|||
41
zoran
10.06.21
✎
14:54
|
Вопрос изначальный по идее так и остается. По какой причине то проходит запись в Temp, то нет. Бред какой-то происходит.
|
|||
42
DrZombi
гуру
10.06.21
✎
14:54
|
(40) Подвиг за день не должен превышать больше одного... Это вы дальше сами ;)
|
|||
43
zoran
10.06.21
✎
14:54
|
(42) :)
|
|||
44
DrZombi
гуру
10.06.21
✎
14:55
|
(41) Если оба юзвера или много считывают, то может быть так, что у всех одно и тоже временное имя, 1С... что сказать ;)
|
|||
45
Kassern
10.06.21
✎
14:56
|
(40) тоже наверное можно без создания временного файла обойтись.
|
|||
46
zoran
10.06.21
✎
14:58
|
(44) Интересное предположение. Может так и происходит на самом деле
|
|||
47
DrZombi
гуру
10.06.21
✎
14:59
|
(46) Код покажи, вот этого (40) - Чисто в познавательных целях ;)
|
|||
48
Kassern
10.06.21
✎
14:59
|
(46) создайте свою папочку на серваке и дайте к ней доступ. Сами контролируйте уникальность файлов. Либо вообще поправьте код, чтобы избыточные временные файлы не создавались.
|
|||
49
SSSSS_AAAAA
10.06.21
✎
15:00
|
(41) Про антивирус уже писали?
|
|||
50
Kassern
10.06.21
✎
15:00
|
(47) скорее всего возвращается ссылка на pdf брони созданной, а ее пытаются во временном файле записать)
|
|||
51
DrZombi
гуру
10.06.21
✎
15:01
|
+(46) Вот тебе генератор имен.
Функция УникальноеИмя(расширение) Возврат "" + КаталогВременныхФайлов() + СокрЛП(Новый УникальныйИдентификатор())+"."+расширение; КонецФункции |
|||
52
Kassern
10.06.21
✎
15:06
|
(51) а вот тут почитаешь и 1ска тебе тыкает, что так делать не надо, только для веб клиента)
https://its.1c.ru/db/v8std/content/542/hdoc |
|||
53
Kassern
10.06.21
✎
15:07
|
(52) тут понимаешь ли 1ской все гарантируется и должно работать)
|
|||
54
DrZombi
гуру
10.06.21
✎
15:09
|
(52) Если по каким-то причинам прикладной код не удалит созданный файл (например, между блоками создания и удаления временного файла возникнет штатное или нештатное исключение), этот файл так и останется в каталоге временных файлов.
... А теперь вопрос, какой метод от 1С, удалит все временные файлы на сервере? На сервере, где так же есть такая вещь, как КЭШ сервера :) |
|||
55
Kassern
10.06.21
✎
15:10
|
(54) вроде бы перезапуск службы 1с это делать должен)
|
|||
56
DrZombi
гуру
10.06.21
✎
15:11
|
(54) >>> Если по каким-то причинам прикладной код не удалит созданный файл
Файл в любом случаи останется :) ...Или 1С так же повторно заюзает этот файл? |
|||
57
DrZombi
гуру
10.06.21
✎
15:11
|
(55) Что? Вы хотите сказать, что при рестарте службы, у многих пользователей автоматом гарантировано все ляжет? :)))
|
|||
58
DrZombi
гуру
10.06.21
✎
15:13
|
+(55) и тут же 1С разрешает этот код в (51) для вэба :))))
3.1. При выполнении кода веб-клиентом метод ПолучитьИмяВременногоФайла недоступен. Поэтому для формирования имен временных файлов и каталогов необходимо использовать функцию КаталогВременныхФайлов и объект УникальныйИдентификатор. Неправильно: Каталог = КаталогВременныхФайлов(); ИмяФайла = "TempDataFile.xml"; ИмяПромежуточногоФайла = Каталог + ИмяФайла; Данные.Записать(ИмяПромежуточногоФайла); Правильно: Каталог = КаталогВременныхФайлов(); ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml"; ИмяПромежуточногоФайла = Каталог + ИмяФайла; Данные.Записать(ИмяПромежуточногоФайла); |
|||
59
zoran
10.06.21
✎
15:16
|
(47) Вот этот кусок кода:
vConfirmationFileName = StrReplace(vDocObj.Ref.Metadata().Presentation() + " " + Format(vDocObj.GuestGroup.Code, "ND=12; NFD=0; NG="), " ", "_") + ".pdf"; vConfirmationFilePath = cmGetFullFileName(vConfirmationFileName, TempFilesDir()); vConfirmationSpreadsheet.Write(vConfirmationFilePath, SpreadsheetDocumentFileType.PDF); |
|||
60
Kassern
10.06.21
✎
15:16
|
(58) я про это и пишу, что для только для вэба и можно. По идее, когда сеанс перезапускается, который создавал временный файлы, то они подчищаются. Если же перезапустить службу 1ски, то все сеансы схлопнутся, все временные файлы созданные в этих сеансах должны удалиться платформой.
|
|||
61
Kassern
10.06.21
✎
15:18
|
(59) а где гарантия, что vConfirmationFileName уникально? Если к примеру 2 человека одновременно этот кусок кода выполнят.
|
|||
62
Kassern
10.06.21
✎
15:20
|
(59) может у вас действительно, что то с правами на серваке? Пробовали на другой машинке базу развернуть?
|
|||
63
zoran
10.06.21
✎
15:39
|
(62) К сожалению нет такой возможности.
|
|||
64
DrZombi
гуру
10.06.21
✎
17:12
|
(59) Проблемы, т.к. нам тут не видно.
1. Что это за код и до какой степени он уникален? "vDocObj.GuestGroup.Code" 2. Для чего это пишут в формате PDF? 3. Вопрос из (61), а где гарантия? :) |
|||
65
DrZombi
гуру
10.06.21
✎
17:12
|
(60) Сколько раз перезапускал, такого не замечал :)
|
|||
66
DrZombi
гуру
10.06.21
✎
17:15
|
+(60) Если Автор (0) гарантирует, что будет удалять такие файлы САМ, то вероятность зависших файлов равна ничтожному проценту.
Т.е. парочка файлов просочится, но не более. Учитывая, сколько раз мне приходилось чистить папку темп на сервере, для восстановления работоспособности баз, после динамической.обновы. и др. сбоев. Вот все что там пишется, зависает, не стоит и ломаной десятины... Главное Серверу 1С не жадничать дискового пространства под его временные файлы :) |
|||
67
DrZombi
гуру
10.06.21
✎
17:17
|
+(59) А проверки на то, что файл уже есть, тоже присутствуют?
|
|||
68
DrZombi
гуру
10.06.21
✎
17:18
|
Кода мало, давай под 1000 строк :)
|
|||
69
DrZombi
гуру
10.06.21
✎
17:18
|
Не жадничай :)
|
|||
70
Kassern
10.06.21
✎
17:58
|
(67) да какая там проверка, все же тут есть:
vConfirmationFilePath = cmGetFullFileName(vConfirmationFileName, TempFilesDir()); создали путь во временном каталоге vConfirmationSpreadsheet.Write(vConfirmationFilePath, SpreadsheetDocumentFileType.PDF); записали табдок по этому пути в формате пдф. |
|||
71
DrZombi
гуру
11.06.21
✎
06:34
|
(70) Если так, то это жесть :)))
|
|||
72
zoran
22.06.21
✎
09:02
|
Всем спасибо за обсуждение. В итоге, после общения с ТП конфигурации выяснилось, что запись на диск требуется для отправки печатных форм документов (бронирования, в частности) клиентам. И в настройках есть возможность отключить данную опцию. Далее понаблюдаем, исчезнут ли ошибки.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |