Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Ошибка при выполнении файловой операции

Ошибка при выполнении файловой операции
Я
   zoran
 
09.06.21 - 15:35
Приветствую, уважаемые форумчане.
Поделитесь, пожалуйста, опытом, может кто сталкивался. Из-за чего может возникать ошибка: "Ошибка при выполнении файловой операции 'C:\Users\USR1CV8\AppData\Local\Temp\v8_1BF4_352.mxl'". Ошибка происходит при попытке открыть элемент справочника. Ошибка не постоянная, может появиться, а может и нет. База на SQL. Сервер виртуальный. Очень напрягает такая ситуация, особенно, если непонятная причина.
   mikecool
 
1 - 09.06.21 - 15:37
смотри, что у тебя при открытии происходит, видимо коряво отчет формируется
   zoran
 
2 - 10.06.21 - 11:05
(1) При открытии нашел место кода, где пишется в этот временный файл. Но проблема то несколько в ином, в том, что в один момент времени все без ошибок, а в другой момент времени выдает эту ошибку. Вот и хотим понять, на чьей стороне ошибка: диск виноват (хоть и виртуальный), права на каталог "тупят" (хотя всем дали полные) или что-то другое, неизвестное пока. Может был у кого прецедент и выяснили причину?
   1Сергей
 
3 - 10.06.21 - 12:56
(2) Места хватает на сервере?
   zoran
 
4 - 10.06.21 - 13:03
(3) Не зависит особо от этого. Бывает достаточно места, бывает мало остается, но ошибка в обоих случаях может появляться. Да и файл этот совсем небольшого размера же, для него уж места предостаточно.
   Kassern
 
5 - 10.06.21 - 13:04
(0) может файл занят а с ним какие то манипуляции хотите сделать. Когда он не занят, то работает, когда не успевает его освободить, тогда ошибку ловите.
   zoran
 
6 - 10.06.21 - 13:06
(5) Так он вроде только при данном событии создается (при открытии элемента справочника, в смысле), а затем тут же удаляется.
   1Сергей
 
7 - 10.06.21 - 13:08
(6) всегда с одним и тем же именем? А если двое отчет откроют?
   ДенисЧ
 
8 - 10.06.21 - 13:10
(7) Видно же, что это временный файл...
   Kassern
 
9 - 10.06.21 - 13:11
(6) ругается при создании, или при удалении?
   Kassern
 
10 - 10.06.21 - 13:13
(6) если не секрет, для чего вы временный файл создаете, что там такого специфического, чего нельзя во временное хранилище пихнуть?
   zoran
 
11 - 10.06.21 - 13:25
(7) Разный
   zoran
 
12 - 10.06.21 - 13:26
(9) Пишет, что при вызове Write
   zoran
 
13 - 10.06.21 - 13:27
(10) Конфигурация специализированная, 1С Отель. Разработчики так сделали
   Kassern
 
14 - 10.06.21 - 13:29
(13) а что на это говорят разработчики этого чудо решения?
   Kassern
 
15 - 10.06.21 - 13:32
(12) если код не большой, где этот временный файл создается, пишется и удаляется, то можете сюда кусок скинуть, либо на пастебин ссылкой. Возможно там где-нить в коде косяк.
   zoran
 
16 - 10.06.21 - 13:58
(14) Отмалчиваются
   zoran
 
17 - 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
   1Сергей
 
18 - 10.06.21 - 13:59
(17) расстрелять!
   Kassern
 
19 - 10.06.21 - 14:11
(17) И это все, для того чтобы вернуть цвет ячейки... Может у вас ошибка каждый раз когда pColor.Type <> ColorType.Absolute?
   DrZombi
 
20 - 10.06.21 - 14:18
(0) Предлагаю, не писать этот файл ;)
   DrZombi
 
21 - 10.06.21 - 14:21
(17) Этот ужас, где пишется?
На клиенте или Сервере?
   1Сергей
 
22 - 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

С Вас сто рублёв
   1Сергей
 
23 - 10.06.21 - 14:23
(22) -> (17)
   zoran
 
24 - 10.06.21 - 14:30
(19) Проверил в отладчике. Когда не равен, проскакивает без ошибок.
   Kassern
 
25 - 10.06.21 - 14:32
(23) New Color() же)
   zoran
 
26 - 10.06.21 - 14:32
(21) Это в общем модуле, на сервере
   1Сергей
 
27 - 10.06.21 - 14:36
(25) не скрепно
   DrZombi
 
28 - 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
   DrZombi
 
29 - 10.06.21 - 14:39
+(28) Ну поток уж сам закроешь ;)
   DrZombi
 
30 - 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
 
 
   Kassern
 
31 - 10.06.21 - 14:42
(29) ну это ладно, что mxl, а если бы xlsx был то в потоке уже так просто табдок не прочитаешь...
   DrZombi
 
32 - 10.06.21 - 14:43
(31) У нас не ексель :)
   DrZombi
 
33 - 10.06.21 - 14:43
+ Вот будет ексель, тогда и поговорим про скорость :)
   Kassern
 
34 - 10.06.21 - 14:44
(33) я одного понять не могу, чем создателей webцвета не устроили или различные типовые стили?
   DrZombi
 
35 - 10.06.21 - 14:45
(34) Ненаю, где там это используется, я вот еще не пойму, нак-зачемой по англиски писать :)
   DrZombi
 
36 - 10.06.21 - 14:46
+ Потом даже модифицировать не могут :)
   Kassern
 
37 - 10.06.21 - 14:47
(35) может у индусов заказывали конфу?))
   zoran
 
38 - 10.06.21 - 14:47
(35) Там вся конфа такая. Специально похоже, чтобы сложнее было понять, что они там разработали)
   DrZombi
 
39 - 10.06.21 - 14:51
(38) Соболезную, держи пример, не мучайся хоть со справочником :)
   zoran
 
40 - 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".
   zoran
 
41 - 10.06.21 - 14:54
Вопрос изначальный по идее так и остается. По какой причине то проходит запись в Temp, то нет. Бред какой-то происходит.
   DrZombi
 
42 - 10.06.21 - 14:54
(40) Подвиг за день не должен превышать больше одного... Это вы дальше сами ;)
   zoran
 
43 - 10.06.21 - 14:54
(42) :)
   DrZombi
 
44 - 10.06.21 - 14:55
(41) Если оба юзвера или много считывают, то может быть так, что у всех одно и тоже временное имя, 1С... что сказать ;)
   Kassern
 
45 - 10.06.21 - 14:56
(40) тоже наверное можно без создания временного файла обойтись.
   zoran
 
46 - 10.06.21 - 14:58
(44) Интересное предположение. Может так и происходит на самом деле
   DrZombi
 
47 - 10.06.21 - 14:59
(46) Код покажи, вот этого (40) - Чисто в познавательных целях ;)
   Kassern
 
48 - 10.06.21 - 14:59
(46) создайте свою папочку на серваке и дайте к ней доступ. Сами контролируйте уникальность файлов. Либо вообще поправьте код, чтобы избыточные временные файлы не создавались.
   SSSSS_AAAAA
 
49 - 10.06.21 - 15:00
(41) Про антивирус уже писали?
   Kassern
 
50 - 10.06.21 - 15:00
(47) скорее всего возвращается ссылка на pdf брони созданной, а ее пытаются во временном файле записать)
   DrZombi
 
51 - 10.06.21 - 15:01
+(46) Вот тебе генератор имен.

Функция УникальноеИмя(расширение)
    Возврат "" + КаталогВременныхФайлов() + СокрЛП(Новый УникальныйИдентификатор())+"."+расширение;
КонецФункции
   Kassern
 
52 - 10.06.21 - 15:06
(51) а вот тут почитаешь и 1ска тебе тыкает, что так делать не надо, только для веб клиента)
https://its.1c.ru/db/v8std/content/542/hdoc
   Kassern
 
53 - 10.06.21 - 15:07
(52) тут понимаешь ли 1ской все гарантируется и должно работать)
   DrZombi
 
54 - 10.06.21 - 15:09
(52) Если по каким-то причинам прикладной код не удалит созданный файл (например, между блоками создания и удаления временного файла возникнет штатное или нештатное исключение), этот файл так и останется в каталоге временных файлов.

...
А теперь вопрос, какой метод от 1С, удалит все временные файлы на сервере?
На сервере, где так же есть такая вещь, как КЭШ сервера :)
   Kassern
 
55 - 10.06.21 - 15:10
(54) вроде бы перезапуск службы 1с это делать должен)
   DrZombi
 
56 - 10.06.21 - 15:11
(54) >>> Если по каким-то причинам прикладной код не удалит созданный файл

Файл в любом случаи останется :)
...Или 1С так же повторно заюзает этот файл?
   DrZombi
 
57 - 10.06.21 - 15:11
(55) Что? Вы хотите сказать, что при рестарте службы, у многих пользователей автоматом гарантировано все ляжет? :)))
   DrZombi
 
58 - 10.06.21 - 15:13
+(55)  и тут же 1С разрешает этот код в (51) для вэба :))))

3.1. При выполнении кода веб-клиентом метод ПолучитьИмяВременногоФайла недоступен. Поэтому для формирования имен временных файлов и каталогов необходимо использовать функцию КаталогВременныхФайлов и объект УникальныйИдентификатор.

Неправильно:

Каталог = КаталогВременныхФайлов();
ИмяФайла = "TempDataFile.xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

Правильно:

Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".xml";
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);
   zoran
 
59 - 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);
   Kassern
 
60 - 10.06.21 - 15:16
(58) я про это и пишу, что для только для вэба и можно. По идее, когда сеанс перезапускается, который создавал временный файлы, то они подчищаются. Если же перезапустить службу 1ски, то все сеансы схлопнутся, все временные файлы созданные в этих сеансах должны удалиться платформой.
 
 
   Kassern
 
61 - 10.06.21 - 15:18
(59) а где гарантия, что vConfirmationFileName уникально? Если к примеру 2 человека одновременно этот кусок кода выполнят.
   Kassern
 
62 - 10.06.21 - 15:20
(59) может у вас действительно, что то с правами на серваке? Пробовали на другой машинке базу развернуть?
   zoran
 
63 - 10.06.21 - 15:39
(62) К сожалению нет такой возможности.
   DrZombi
 
64 - 10.06.21 - 17:12
(59) Проблемы, т.к. нам тут не видно.

1. Что это за код и до какой степени он уникален? "vDocObj.GuestGroup.Code"
2. Для чего это пишут в формате PDF?
3. Вопрос из (61), а где гарантия? :)
   DrZombi
 
65 - 10.06.21 - 17:12
(60) Сколько раз перезапускал, такого не замечал :)
   DrZombi
 
66 - 10.06.21 - 17:15
+(60) Если Автор (0) гарантирует, что будет удалять такие файлы САМ, то вероятность зависших файлов равна ничтожному проценту.
Т.е. парочка файлов просочится, но не более.

Учитывая, сколько раз мне приходилось чистить папку темп на сервере, для восстановления работоспособности баз, после динамической.обновы. и др. сбоев.
Вот все что там пишется, зависает, не стоит и ломаной десятины...
Главное Серверу 1С не жадничать дискового пространства под его временные файлы :)
   DrZombi
 
67 - 10.06.21 - 17:17
+(59) А проверки на то, что файл уже есть, тоже присутствуют?
   DrZombi
 
68 - 10.06.21 - 17:18
Кода мало, давай под 1000 строк :)
   DrZombi
 
69 - 10.06.21 - 17:18
Не жадничай :)
   Kassern
 
70 - 10.06.21 - 17:58
(67) да какая там проверка, все же тут есть:
vConfirmationFilePath = cmGetFullFileName(vConfirmationFileName, TempFilesDir()); создали путь во временном каталоге
vConfirmationSpreadsheet.Write(vConfirmationFilePath, SpreadsheetDocumentFileType.PDF); записали табдок по этому пути в формате пдф.
   DrZombi
 
71 - 11.06.21 - 06:34
(70) Если так, то это жесть :)))
   zoran
 
72 - 22.06.21 - 09:02
Всем спасибо за обсуждение. В итоге, после общения с ТП конфигурации выяснилось, что запись на диск требуется для отправки печатных форм документов (бронирования, в частности) клиентам. И в настройках есть возможность отключить данную опцию. Далее понаблюдаем, исчезнут ли ошибки.


Список тем форума
 
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.