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

Программирование 1С 8.х для начинающих

Общие вопросы

Временное хранилище в 1С 8.2

  •  Печать 
  • E-mail

Передача файла с клиента на сервер и обратно.

В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».

Чем полезно временное хранилище:

  • Не надо создавать объекты в конфигурации
  • Доступно и с сервера и с клиента
  • Можно записать любой объект

Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлении.

Синтаксис работы с хранилищем простой:

Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6» .

УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.

Чтобы получить из хранилища нужно только указать адрес:

Также можно удалить помещенный объект, используя адрес

Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип — «ДвоичныеДанные»

Помещение в хранилище

Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище

Чтение из хранилища

В интернете есть множество примеров как на сервере записать полученные данные в базу, поэтому ниже приводится другой пример, когда файл полученный на сервере открывается для работы. В качестве такого файла используется XML.

Если мы имеем дело с файлами, то может оказаться удобным метод ПоместитьФайл. Он преобразует файл в двоичные данные и записывает их во ВременноеХранилище. При этом параметром можно настроить открытие диалогового окна для выбора файла. Сделаю оговорку, этот метод нельзя использовать на сервере.

В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.

Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл.»КопияФайла.xml» – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,»Копияфайла.xml» , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод

« Как стать программистом 1С » Язык 1С » ПодключитьРасширениеРаботыСФайлами 1С, УстановитьРасширениеРаботыСФайлами 1С, ПолучитьФайл 1С, ПоместитьФайл 1С, ПолучитьФайлы 1С, ПоместитьФайлы 1С, ПолучитьИзВременногоХранилища 1С, ПоместитьВоВременноеХранилище 1С

ПодключитьРасширениеРаботыСФайлами 1С, УстановитьРасширениеРаботыСФайлами 1С, ПолучитьФайл 1С, ПоместитьФайл 1С, ПолучитьФайлы 1С, ПоместитьФайлы 1С, ПолучитьИзВременногоХранилища 1С, ПоместитьВоВременноеХранилище 1С

В веб-клиенте работа с файлами (чтение/запись) производится только на сервере.

Функция ПодключитьРасширениеРаботыСФайлами() используется в веб-клиенте для включения разрешения работы с файлами (поддерживают не все браузеры), если неудачно – возвращает Ложь. Перед первым использованием функции в этом браузере на этом комьютере требуется установить расширение работы с файлами с помощью функции УстановитьРасширениеРаботыСФайлами()

Функции
• ПоместитьФайл(АдресКудаПомещен, ИмяФайла)
• ПолучитьФайл(АдресОткуда)
• ПоместитьФайлы(МассивИменФайлов, МассивАдресовКудаПомещены)
• ПолучитьФайлы(МассивАдресовОткуда)
позволяют передвать файлы между клиентом и сервером.

Функции ПолучитьИзВременногоХранилища() и ПоместитьВоВременноеХранилище() позволяют получить данные файла из временного хранилища сервера, куда они были помещены с помощью ПолучитьФайл() и ПоместитьФайл().

На клиенте файлы располагаются где требуется в файловой системе. На сервере файлы помещаются в «хранилище» — временный каталог файлов сервера 1С. Напрямую с хранилищем работать нельзя – требуется получить значение из хранилища с помощью функции ПолучитьИзВременногоХранилища() и сохранить во временный файл на сервере с помощью функции ПолучитьИмяВременногоФайла()

Данные функции можно использовать не только в веб-клиенте, но и в остальных клиентах для оптимизации работы с файлами.

При использовании данных функций в веб-клиенте необходимо заранее выполнить функцию ПодключитьРасширениеРаботыСФайлами()

Обратите внимание на различные варианты поведения системы при выполнения данных функций. В некоторых браузерах выполнение кода программы прерывается до закачки файлов на сервер (например, пользователю выводится окно с процентами закачки файла), а в некоторых – выполнение программы продолжается, а загрузка производится фоново.

Для примеров использован текстовый файл на локальной «клиентской» машине по адресу «D:Текстовый файл.txt» со следующим содержимым:
Привет, мир!
Конец файла

Пример 1. Чтение текстового файла на сервере. Имя файла выбирает пользователь/указывает программист

//если подключить не удалось — требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить — то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;
КонецЕсли;
КонецЕсли;
#КонецЕсли

//перемещаем файл на сервер во «внутреннее хранилище сервера»
ВнутреннийАдресСервера = «»;

//если имя файла выбирает пользователь в стандартном диалоговом окне Windows
Результат = ПоместитьФайл(ВнутреннийАдресСервера);

//если имя файла указывает программист напрямую
//Результат = ПоместитьФайл(ВнутреннийАдресСервера, «D:Текстовый файл.txt»,, Ложь);

Если не Результат Тогда
ВызватьИсключение «Ошибка. Не удалось передать файл на сервер. Операция прервана.»;
КонецЕсли;
Сообщить(ВнутреннийАдресСервера);

//переводим выполнение на сервер вызовом серверной процедуры
ЧтениеФайла(ВнутреннийАдресСервера);
КонецПроцедуры

//начинаем работать с файлом

//узнаем размер файла в байтах (и переведем размер в мегабайты)
Файл = Новый Файл(ИмяВременногоФайла);
Сообщить(Строка(Окр(Файл.Размер() /1024 /1024, 2)) + «Мб»);

//прочитаем первую строку файла
ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла);
ТекстПервойСтрокиФайла = ТекстовыйФайл.ПрочитатьСтроку();
Сообщить(ТекстПервойСтрокиФайла);

1с возвращает:
e1cib/tempstorage/ad728cdf-fce4-4c50-b348-87d5265a57a6
C:UsersИмяПользователяWindowsAppDataLocalTempv8_BE51_59.tmp
0Мб
Привет, мир!

Пример 2. Передача на сервер нескольких файлов. Имена файлов выбирает пользователь/указывает программист

&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)

//для веб-клиента требуется дополнительно подключение расширения работы с файлами
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();

//если подключить не удалось — требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить — то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;
КонецЕсли;
КонецЕсли;
#КонецЕсли

//перемещаем файл на сервер во «внутреннее хранилище сервера»
МассивВнутреннихАдресовСервера = Новый Массив;

//если список имен файлов выбирает пользователь
Результат = ПоместитьФайлы(,МассивВнутреннихАдресовСервера);

//если список имен файлов указывает программист напрямую
//МассивВнутреннихАдресовСервера = Новый Массив;
//МассивИменФайлов = Новый Массив;
//МассивИменФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(«D:Текстовый файл.txt», «»));
//Результат = ПоместитьФайлы(МассивИменФайлов, МассивВнутреннихАдресовСервера,, Ложь);

Если не Результат или МассивВнутреннихАдресовСервера.Количество() = 0 Тогда
ВызватьИсключение «Ошибка. Не удалось передать файл на сервер. Операция прервана.»;
КонецЕсли;

Для каждого ИмяФайла из МассивВнутреннихАдресовСервера Цикл
Сообщить(ИмяФайла.Хранение);

//переводим выполнение на сервер вызовом серверной процедуры
//реализацию этой функции см. в примере 1
ЧтениеФайла(ИмяФайла.Хранение);
КонецЦикла;

Пример 3. Запись нового файла на сервере с последующей передачей на клиент. Имя файла выбирает пользователь/формирует программист

&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)

//для веб-клиента требуется дополнительно подключение расширения работы с файлами
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();

//если подключить не удалось — требуется установить его (в первый раз)
Если не Результат Тогда
//устанавливаем
УстановитьРасширениеРаботыСФайлами();
//если не удалось установить — то повторный вызов подключения будет неудачный
Если не ПодключитьРасширениеРаботыСФайлами() Тогда
//сообщаем об ошибке и прерываем работу программы
ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;
КонецЕсли;
КонецЕсли;
#КонецЕсли

//вызов серверной процедуры формирования файла, она возвращает «внутренний адрес», передаем его параметром
//куда сохранил пользователь файл и сохранил ли — мы не знаем
//пользователь всегда подтверждает разрешение на получение файла
ПолучитьФайл(ФормированиеФайла());

//вариант с сохранением файла без подтверждения пользователя, имя файла указываем сразу, в веб-клиенте работать не будет
//ПолучитьФайл(ФормированиеФайла(), «D:Текстовый файл.txt», Ложь);

&НаСервере
Функция ФормированиеФайла()

//получаем файл из «временного хранилища сервера» и сохраняем во временный файл на сервере
ИмяВременногоФайла = ПолучитьИмяВременногоФайла();

//начинаем работать с файлом

//записываем текст в файл
ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла);
ТекстовыйФайл.ЗаписатьСтроку(«Привет, мир!»);
ТекстовыйФайл.ЗаписатьСтроку(«Конец файла»);
ТекстовыйФайл.Закрыть();

//помещаем во «временное хранилище сервера», система вернет «внутренний адрес»
Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));

v8: Получение данных из ХралищаЗначений

Данные в хранилще есть. В элемент они попадают, но при открытии элемента картикнка не видна, что сделал не так.

ДанныеАдрес (Строка) Реквизит элемента спр.

&НаСервереПроцедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение) ТаблицаФайлов = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресХЗ); Для Каждого СтрокаФайл Из ТаблицаФайлов Цикл Файл = Новый Файл(СтрокаФайл.Значение.Имя); ХранимыйФайл = Справочники.ХранилищеДанныхСправочники.СоздатьЭлемент(); ХранимыйФайл.СсылкаНаОбъект = СсылкаНаОбъект; ХранимыйФайл.Наименование = Файл.Имя; ХранимыйФайл.ДанныеПуть = Файл.Путь; ХранимыйФайл.ДанныеТекущаяДата = ТекущаяДата();

// . ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных()); ХранимыйФайл.Записать(); КонецЦикла; Элементы.Список.Обновить(); КонецПроцедуры

Как-то у тебя сложно или я чего-то не понял, вообщем так:

Действия по установке (загрузке) картинки и ее отображения на форме нашего справочника Сотрудника необходимо выполнять на стороне сервера. Это особенность работы системы с файлами. Именно для этого в тексте процедуры ДобавитьКартинку осуществляется вызов другой процедуры УстановитьКартинку(), которая будет выполняться на сервере.

В программном модуле, ниже процедуры ДобавитьКартинку(Команда) пишем следующий программный код:

Чтобы при открытии картинка отобразилась:

1) я в ообщей форме помещаю данные в ХранилищеЗначений. (данные заполнены)

2) При нажатии кпонки на общей форме создаются элементы справочника. Все данные из хранилища заполняются в элементе спр, а вот с картикой проблема. Я сейчас еще разок книгу читану. Где то рядом брожу.(Процедура ОбработкаВыбора)

&НаСервереПроцедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение) ТаблицаФайлов = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресХЗ); Для Каждого СтрокаФайл Из ТаблицаФайлов Цикл Файл = Новый Файл(СтрокаФайл.Значение.Имя); ХранимыйФайл = Справочники.ХранилищеДанныхСправочники.СоздатьЭлемент();

.ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных());

Если написать (выбараю 2 картинки)

Этот алгоритм не отрабатывает..

ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных());

Да нет управляемая.

Для того что бы избавиться от модальности я решил передавать данные через хранилище.

Вот алгорит выгрузки из общей формы

блин. да что с синтаксисом ;( капец какой-то

E_Migachev, объясни как нужно вставлять наверно с видео

(12) да, напишу вечерком

для bell:

в управляемых формах принцип следующий:

Простой пример справочника с картинкой

Отображения картинки текущего элемента списка

В новой версии платформы 1С 8.2 работа с картинками производится отличным от предыдущих платформ методом, разобраться с которым без примеров сложно. Подробно можно прочитать в книге Разработка управляемого интерфейса глава 3.18. Работа с файлами и картинками. Примеры данной статья являются переработанными и дополненными примерами книги.

Картинка как и раньше (8.1) хранится в базе в реквизите (реквизите ТЧ) с типом ХранилищеЗначения, но записать данные в реквизит с этим типом обычном способом нельзя, запись производится в предопределенной процедуре «ПередЗаписьюНаСервере».

Для отображения картинки создается элемент формы поле картинки, данными для которого, является реквизит формы (с типом Строка(0)), содержащий навигационную ссылку на картинку (можно получить функцией «ПолучитьНавигационнуюСсылку») или адрес во временном хранилище (пол.ф. «ПоместитьФайл»)

Ниже приведен код части примера:

В книге Разработка управляемого интерфейса используется дополнительно поле для сохранения имени файла оно необходимо если нужно чтобы программа запомнила из какой папки пользователь предпочитает добавлять или выгружать файлы.

В процедуре ПриЗаписиНаСервере на первый взгляд можно убрать код удаление из временного хранилища т.к. ф. ПоместитьФайл вызывается с параметром УникальныйИдентификатор формы т.е. объект хранилища будет существовать до закрытия формы, но рекумендуется освобождать ресурсы сразу (если пользователь загрузит картинку и нажмет записать, форма не закрыта и объект будет существовать до закрытия).

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

Я
   zoran

09.06.21 — 15:35

Приветствую, уважаемые форумчане.

Поделитесь, пожалуйста, опытом, может кто сталкивался. Из-за чего может возникать ошибка: «Ошибка при выполнении файловой операции ‘C:UsersUSR1CV8AppDataLocalTempv8_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:UsersUSR1CV8AppDataLocalTempБронь_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

Всем спасибо за обсуждение. В итоге, после общения с ТП конфигурации выяснилось, что запись на диск требуется для отправки печатных форм документов (бронирования, в частности) клиентам. И в настройках есть возможность отключить данную опцию. Далее понаблюдаем, исчезнут ли ошибки.

  1. Добрый день, товарищи!

    Что за беда, пытаюсь зайти в сформированный отчет Баланс и 1С вылетает с сообщением
    ошибка при выполнении файловой операции C:UsersUserAppDataLocalTEMPбла…бла.tmp после этого вообще в базу не пускает с той же ошибкой, пока не удалишь файлик на который ругается.
    Попытки лечения:
    — чистка темпа/кэша/логов и т.п.
    — chdbf
    — переустановка платформы
    — выгрузка/загрузка
    не помогли!!!
    Скачал базу к себе на рабочий комп — все ОК, соответственно, что то в ее компе не так, а что???


  2. Graf_Prof

    Offline

    Graf_Prof
    Новичок в 1С

    Регистрация:
    9 мар 2011
    Сообщения:
    44
    Симпатии:
    1
    Баллы:
    4

    Ошибку исправили? Уважаемый, kotlovD.
    Т.к. судя по указанному пути у Вас ОС Win7 или более свежая, то посмотрите права доступа и разрешения.

  3. Ну да, права первое, что пришло в голову… На папке доступ для всех открыл, 1С-ку запускал от имени админа и т.д. … шаманил как мог — не помогает. Потом админ сказал, что 1С теряет права от локального юзера (причем, уже во время работы) — через сеть все ок, как то пофиксил, но не сказал как. В общем проблема была с локальным юзверем


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Ошибка обновления базы в режиме 1С: Предприятие: Ошибка при выполнении файловой операции ‘v8srvr://server/Config/’ по причине: Ошибка при выполнении файловой операции Попытка поместить указатель на файл перед началом файла

Описание ошибки:
При обновлении конфигурации 1С: Комплексная автоматизация, ред. 1.1 при установке релиза 1.1.104.1 и запуска серверной базы в режиме 1С: Предприятие для завершения обновления релиза после согласия лицензионного соглашения возникла ошибка, которая фатально прерывала дальнейшую работу с базой:
Ошибка при выполнении файловой операции ‘v8srvr://ECO-SERVER2/1C-ECO82/Config/7ad7a83c-ceed-4eaf-871f-23830205ec2f.0’
по причине:
Ошибка при выполнении файловой операции ‘C:Usersadmin1CAppDataLocalTempv8_EBA6_7.tmp’. 131(0x00000083): Попытка поместить указатель на файл перед началом файла.

Найденные решения:

После подтверждения на продолжение обновления практически сразу же, в ближайшие секунды, долго ждать не приходилось.

1С 8 Ошибка при выполнении файловой операции  'v8srvr://server/Config/' по причине: Ошибка при выполнении файловой операции Попытка поместить указатель на файл перед началом файла.

Возникала ошибка. При повторном запуске базы в режиме 1С: Предприятие повторялось то же самое. Скрин не совсем тот, а уже сделанный позднее, когда ошибка себя проявила повторно, после обновления конфигурации другим релизом (об этом подробнее см. в конце публикации), но в точности иллюстрирующий ситуацию. Разница лишь в том, какой текст следует после «‘v8srvr://<имя_сервера>/<имя_базы>/Config/»

Вот полный текст ошибки

Ошибка при выполнении файловой операции  'v8srvr://server/Config/' по причине: Ошибка при выполнении файловой операции Попытка поместить указатель на файл перед началом файла.

Сразу же при виде формулировки «Ошибка при выполнении файловой операции  ‘v8srvr://<имя_сервера>/<имя_базы>/Config/7ad7a83c-ceed-4eaf-871f-23830205ec2f.0’ по причине:» рука потянулась выполнить «Тестирование и исправление базы данных»

Но, увы, тестирование не повлияло на ситуацию. Ошибка вновь возникала. И тут внимание обратилось ко второй половине формулировки ошибки: «Ошибка при выполнении файловой операции  ‘C:Usersadmin1CAppDataLocalTempv8_EBA6_7.tmp’. 131(0x00000083): Попытка поместить указатель на файл перед началом файла.»

В этом пути явно присутсвует папка со временными файлами базы. Тогда было решено выполнить простую операцию удаления и добавления базы в списке баз, чтобы очистить пользовательские временные файлы, связанные с базой.

И это дало положительный результат. Обновление базы после этого было выполнено успешно.

P.S.

P.S.: ситуация имела повторное возникновение еще позднее (т.к. выполнялось продолжительное обновление конфигурации 1С: Комплексная автоматизация 1.1, было пропущено чуть более 20 релизов) но в сопряжении с ошибкой, очень похожей по формулировке на ту, что описана в описании ошибки Ошибка разбора XML: -[1,202] Фатальная ошибка: expected ‘>’ . Но, если ознакомиться с похожей ошибкой, то можно увидеть, что она тоже решилась в свое время удалением/добавлением базы в списке баз 1С: Предприятия 8, что очистило пользовательские файлы, связанные с базой и нормализовало дальнейшую работу без дополнительных действий, кроме тех, что описаны выше.

1C 8 ошибка при обновлении

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

24-04-2019

Журавлев А.С.
(Сайт azhur-c.ru)

Немного поговорим о профиле безопасности в 1С кластере.

Ну вот и настал то момент, когда и мне понадобилось ограничивать пользователей на какие либо действия.

Работать, скорей всего, он уже будет только в 1С:Предприятие КОРП версии согласно информационному письму фирмы 1С :

  • Об изменении правил распространения «1С:Предприятие 8 КОРП» и создании «Центров компетенции 1С:КОРП» от 2014
  • Начиная с версии платформы 8.3.12.1852, 8.3.13.1791 и 8.3.14.1592 появилось разделение уровней лицензий на ПРОФ и КОРП.

Как создавать профиль безопасности в интернете статей много. Опишу только то, что для меня не оказалось явным.

Прописываем профиль безопасности в кластере «Параметры информационной базы» -> «Профиль безопасности». Заводим ручками обычным текстом

Для того чтобы конфигурации запускались достаточно будет установить галку «Разрешен полный доступ :» галка «К внешним модулям»

Параметры профиля безопасности

В таком виде будет работать частично. Могут появляться сообщения об ошибке такого вида как у меня:

  • Ошибка при выполнении файловой операции  ‘temp’. Доступ запрещен профилем безопасности».

А ниже весь перечень обращении к методам встроенного языка, при которых может возникать ошибка.

  • Глобальный контекст:
    • КаталогПрограммы(),
    • КаталогВременныхФайлов(),
    • ЗначениеВФайл(),
    • ЗначениеИзФайла(),
    • КопироватьФайл(),
    • ПереместитьФайл(),
    • УдалитьФайлы(),
    • НайтиФайлы(),
    • СоздатьКаталог(),
    • РазделитьФайл(),
    • ОбъединитьФайлы(),
    • ПолучитьИмяВременногоФайла().
  • Объект Картинка:
    • конструктор на основании имени файла,
    • Записать().
  • Объект ДвоичныеДанные:
    • конструктор на основании имени файла,
    • Записать().
  • Объект ИзвлечениеТекста:
    • конструктор на основании имени файла,
    • изменение свойства ИмяФайла,
    • Записать().
  • Объект ТекстовыйДокумент:
    • Записать(),
    • Прочитать().
  • Объект ТабличныйДокумент:
    • Записать(),
    • Прочитать().
  • Объект ФорматированныйДокумент:
    • Записать().
    • Объект ГрафическаяСхема:
    • Записать(),
    • Прочитать().
  • Объект ГеографическаяСхема:
    • Записать(),
    • Прочитать().
  • Объект Файл:
    • конструктор на основании имени файла.
    • Объект xBase:
    • конструктор на основании имени файла.
    • ОткрытьФайл(),
    • СоздатьИндексныйФайл(),
    • СоздатьФайл().
  • Объект ЧтениеXML:
    • ОткрытьФайл().
  • Объект ЗаписьXML:
    • ОткрытьФайл().
  • Объект КаноническаяЗаписьXML:
    • ОткрытьФайл().
  • Объект ПреобразованиеXSL:
    • ЗагрузитьИзФайла(),
    • ПреобразоватьИзФайла().
  • Объект ЧтениеFastInfoset:
    • ОткрытьФайл().
  • Объект ЗаписьFastInfoset:
    • ОткрытьФайл().
  • Объект ЗаписьZipФайла:
    • конструктор на основании имени файла,
    • Добавить(),
    • Открыть().
  • Объект ЧтениеZipФайла:
    • конструктор на основании имени файла,
    • Извлечь(),
    • ИзвлечьВсе(),
    • Открыть().
  • Объект СертификатКлиентаФайл:
    • конструктор по умолчанию.
  • Объект СертификатыУдостоверяющихЦентровФайл:
    • конструктор по умолчанию.
  • Объект ЗаписьHTML:
    • ОткрытьФайл().
  • Объект ЧтениеHTML:
    • ОткрытьФайл().
  • Объект ЧтениеТекста:
    • конструктор на основании имени файла,
    • Открыть().
  • Объект ЗаписьТекста:
    • конструктор на основании имени файла,
    • Открыть().
  • Объект СертификатКриптографии:
    • конструктор на основании имени файла.
  • Объект МенеджерКриптографии:
    • Подписать(),
    • ПроверитьПодпись(),
    • Зашифровать(),
    • Расшифровать(),
    • ПолучитьСертификатыИзПодписи().
  • Объект ХешированиеДанных:
    • ДобавитьФайл().

В этом случае нужно разрешить записывать временные файлы на компьютер клиента.

Есть два предопределенных логических URL, которые можно использовать это:

  • /bin ‑ каталог загрузочных модулей текущей версии «1С:Предприятия». Этот виртуальный каталог используется методом КаталогПрограммы().
  • /temp ‑ каталог временных файлов. Этот виртуальный каталог используется методом КаталогВременныхФайлов().

Создаем свойство в профиле безопасности, виртуальные каталоги. Задаем логический URL «/temp» . В поле «Физический URL:» пишем «%a» (где %a ‑ каталог данных приложений всех пользователей; )

Весь список разрешенных подстановочных символов такой:

  • %r ‑ ссылочное имя информационной базы;
  • %i ‑ идентификатор информационной базы;
  • %z ‑ строковое представление текущих значений разделителей текущего сеанса в формате, принятом для параметра командной строки /Z.
  • %s ‑ номер сеанса;
  • %c ‑ номер соединения;
  • %p ‑ идентификатор безопасного режима исполнения прикладного кода;
  • %e ‑ каталог загрузочных модулей «1С:Предприятия»;
  • %t ‑ текущий каталог временных файлов операционной системы;
  • %u ‑ каталог данных приложений текущего пользователя;
  • %a ‑ каталог данных приложений всех пользователей;
  • %n ‑ имя текущего пользователя информационной базы;
  • %% ‑ символ %.

Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении функции оплатитьплатежнойкартой ответ терминала ошибка 2002
  • Ошибка при выполнении файловой операции 1cv8 cdn что это
  • Ошибка при выполнении файловой операции std exception
  • Ошибка при выполнении функции оплатитьплатежнойкартой ответ терминала ошибка 2000
  • Ошибка при выполнении файловой операции 1cv8 cdn файловая