Ошибка при вызове конструктора двоичныеданные ошибка доступа к файлу

Ошибка совместного доступа

Я
   калайдеРР

18.05.09 — 13:54

Я в шоке — храню в реквизитe справочника документ в .pdf (все работало), для удобства редактирования добавил хранение в .doc при попытке записать выдает:

{Справочник.Инструкции.Форма.ФормаЭлемента(309)}: Ошибка при вызове конструктора (ДвоичныеДанные): Ошибка совместного доступа к файлу ‘C:WINDOWSTempv8_2F3_73.doc’

       ДвоичныеДанныеWord = Новый ДвоичныеДанные(ВременыйФайлWord);

по причине:

Ошибка совместного доступа к файлу ‘C:WINDOWSTempv8_2F3_73.doc’

что шокировало — в отладчике если пошагово проходить процедуру все нормально! не понятно…

+ что убило окончательно, элемент справочника вообще перестал записываться — причем даже в «ОписаниеОшибки()» пишет — операция не выполнена.

   калайдеРР

1 — 18.05.09 — 13:54

код в студию:
       Word = Новый COMОбъект(«Word.Application»);
       Word.Documents.Add(Диалог.ПолноеИмяФайла);
       Word.ActiveDocument().SaveAs(ВременыйФайлWord);
       Word.Documents.Add(Диалог.ПолноеИмяФайла);
       Word.ActiveDocument().ExportAsFixedFormat(ВременыйФайл,17,False);
       Word.Quit();

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

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

               ИзвлечениеТекста = Новый ИзвлечениеТекста(Диалог.ПолноеИмяФайла);
       Текст = ИзвлечениеТекста.ПолучитьТекст();

               ЭлементыФормы.ТексИнструкции.LoadFile(ВременыйФайл);

   Mitriy

2 — 18.05.09 — 13:55

Касперский стоИт?

   калайдеРР

3 — 18.05.09 — 13:57

нет,НОд — я уверен что это 1Ска

   Mitriy

4 — 18.05.09 — 14:00

Word не успевает файл отпустить… имхо…

   Ц_У

5 — 18.05.09 — 14:01

Word.Quit(); -> Word.Free();?

   калайдеРР

6 — 18.05.09 — 14:10

Метод объекта не обнаружен (Free)
       Word.Free();

   калайдеРР

7 — 18.05.09 — 14:16

по поводу Записи есть варианты?

   калайдеРР

8 — 18.05.09 — 14:30

(4) вроде прав, заработало когда сделал так
       Word = Новый COMОбъект(«Word.Application»);
       Word.Documents.Add(Диалог.ПолноеИмяФайла);
       Word.ActiveDocument().SaveAs(ВременыйФайлWord);
       Word.ActiveDocument().ExportAsFixedFormat(ВременыйФайл,17,False);
       Word.Quit();

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

               ИзвлечениеТекста = Новый ИзвлечениеТекста(Диалог.ПолноеИмяФайла);
       Текст = ИзвлечениеТекста.ПолучитьТекст();

               ЭлементыФормы.ТексИнструкции.LoadFile(ВременыйФайл);

       ЗаписатьВWord();

   калайдеРР

9 — 18.05.09 — 14:31

С записью вопрос открыт…

   калайдеРР

10 — 18.05.09 — 15:00

никогда такого не было… тупо пишет
Ошибка при вызове метода контекста (Записать): Операция не выполнена!

   калайдеРР

11 — 18.05.09 — 16:03

вверх
проблема не решена

  

Aprobator

12 — 18.05.09 — 16:53

попробуй перед
Word.Quit();
вставить
Word.DisplayAlerts = 0;

Ermak27

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

1

1C 8.x

Ошибка при вызове конструктора (ДвоичныеДанные)

28.10.2013, 10:26. Показов 18941. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Почему ошибка выдает
Ошибка при вызове конструктора (ДвоичныеДанные)
НовоеВложение.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Каталог), Новый СжатиеДанных());
по причине:
Ошибка совместного доступа к файлу ‘C:UsersermakovAppDataLocalTempprice.xls’

1C
1
2
3
4
5
6
7
8
9
10
    
    НовоеВложение = Справочники.ВложенияЭлектронныхПисем.СоздатьЭлемент();
    НовоеВложение.Объект = Письмо.Ссылка;
    НовоеВложение.ИмяФайла = "price.xls";
    НовоеВложение.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Каталог), Новый СжатиеДанных());
    Попытка
        НовоеВложение.Записать();
    Исключение
        Отказ = Истина;
    КонецПопытки;



0



Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

28.10.2013, 11:19

2

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



1



4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

28.10.2013, 11:20

 [ТС]

3

Dethmontt, Подскажите на примере пожалуйста



0



Модератор

Эксперт 1С

3724 / 2918 / 575

Регистрация: 10.03.2011

Сообщений: 11,491

Записей в блоге: 1

28.10.2013, 11:26

4

На каком примере? У тебя тупо открыт этот файл — ‘C:UsersermakovAppDataLocalTempprice.xls’ либо висит в процессах

Добавлено через 4 минуты
Возможно ты его открываешь в коде…



0



Ошибка при вызове конструктора (ДвоичныеДанные): Ошибка совместного доступа к файлу Ругается так когда у меня файл открыт. например эксель. Но мне нужно в любом случае его засунуть в хранилище значения. И не важно открыт он или нет.

Скопируй файл во временную папку, сделай что хотел и удали временный файл.

Тэги:

Комментарии доступны только авторизированным пользователям

Похожие вопросы 1С

В этой группе 1С

Ну совершенно верно так и должно быть у каждого с версией 11.0.7.8. Вообще скажу сразу, что функционал работы с почтой весьма убогий, это поймет каждый кто пройдется F11 от создания письма до его отправки, письмо отправляется долго.. Путём доработки скорость отправки писем можно увеличить в 3-10 раз. Кроме того данный глюк при работе с почтой в данном релизе не единственный. Если используется фоновое задание для получения и отправки почты вы еще натолкнётесь обязательно на конфликт блокировок при выполнении транзакций, ну да ладно вопрос не в этом был.
Относительно вашей проблемы можно происходит следующее

Данные = Новый ДвоичныеДанные(Стр.ИмяФайлаНаКомпьютере);

В данной строчке производится запись двоичных данных в переменную «Данные» из файла на диске, расположенному по пути содержащемся в переменной «Стр.ИмяФайлаНаКомпьютере». Естественно получается ошибка так как вместо пути к файлу в эту переменную запихнули ссылку на файл во временном хранилище. Решить данную проблему можно двумя путями.
1) Дописать модуль формы документа для возможности приёма ссылок на файлы из временного хранилища. Для этого модифицируйте код из модуля таким образом:

	Если ЭтоАдресВременногоХранилища(Стр.ИмяФайлаНаКомпьютере) Тогда
Данные=ПолучитьИзВременногоХранилища(Стр.ИмяФайлаНаКомпьютере);
Иначе
Данные = Новый ДвоичныеДанные(Стр.ИмяФайлаНаКомпьютере);
Стр.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, "");
КонецЕсли;

Тем самым мы определяем что если нам передали ссылку на файл во временном хранилище, то мы просто получаем из временного хранилища, а если это просто путь то тогда уже создаем и помещаем двоичные данные во временное хранилище.
Эта доработка уже позволит отправлять сообщения. Но останется еще одна небольшая проблемка. В письме для вложений не будет показана иконка приложения. Чтобы поправить эту досадную оплошность в строке 97 модуля формы документа «ИсходящееЭлектронноеПисьмо» нужно заменить следующий код:

ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(Вложение.Значение, "", ИмяФайла);

вот таким кодом(пояснять уже не буду. :aua: ):

Если ЭтоАдресВременногоХранилища(Вложение.Значение) Тогда
ИмяФайла=Вложение.Представление;	
Иначе
ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(Вложение.Значение, "", ИмяФайла);
КонецЕсли;

После такой доработки иконки у файлов будут отображаться.
Но внимательно посмотрев на то что получилось замечаем еще один косяк, для таких вложений не отображается размер! :D Придётся и этот глюк побороть. Заменяем предидущий код следующим улучшенным:

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


Теперь размер будет отображаться, а также мы предусмотрели защиту от передачи в данную функцию некорректных данных о расположении файла.
2) Вторым способом предполагается добраться всё-таки до момента передачи параметров на форму документа и поправить передающуюся ссылку на путь к файлу во временной директории.
Насколько целесообразен данный способ решать каждому в индивидуальном порядке. На мой взгляд и первый и второй способ далеки от совершенства, но сууть не в этом а в том чтобы каждый решил подобную проблему с минимальными правками кода. Тем более что трешеделы из 1С когда-нибудь таки заделают эту дырку…
Чтобы реализовать данный способ лезем в общие формы и находим форму с названием «ПечатьДокументов», открываем модуль формы и заменяем процедуру «ПоместитьТабличныеДокументыВоВременноеХранилище» следующим содержимым:

Процедура ПоместитьТабличныеДокументыВоВременноеХранилище(СписокФайлов, НастройкиСохранения)

ЗаписьZipФайла = Неопределено;
ИмяАрхива = Неопределено;
Если НастройкиСохранения.ЗапаковатьZIP Тогда
ИмяАрхива = ПолучитьИмяВременногоФайла("zip");
ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива);
КонецЕсли;

СписокТипов = ПолучитьСписокТиповФайловТабличныхДокументов(НастройкиСохранения);
ДатаПредставление = Формат(ТекущаяДата(), "ДФ='yyyyMMdd HH:mm'");

ИмяВременнойПапки = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ИмяВременнойПапки);

Для Каждого ТабДокумент Из ИменаТабДокументов Цикл
ТабДок = ЭтаФорма["Таб" + ТабДокумент.Значение];

Для Каждого ТипФайла Из СписокТипов Цикл

Если ОбъектыПечати.Количество() > 1 Тогда
ИмяФайла = "[ИмяМакета] ([ДатаПредставление]).[Расширение]";
Иначе
ИмяФайла = "[Документ] ([ИмяМакета] [ДатаПредставление]).[Расширение]";
КонецЕсли;

ИмяФайла = СтрЗаменить(ИмяФайла, "[Документ]",			Строка(ОбъектыПечати[0].Значение));
ИмяФайла = СтрЗаменить(ИмяФайла, "[ИмяМакета]",			ТабДокумент.Представление);
ИмяФайла = СтрЗаменить(ИмяФайла, "[ДатаПредставление]",	ДатаПредставление);
ИмяФайла = СтрЗаменить(ИмяФайла, "[Расширение]",		ТипФайла.Представление);

ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла);

ИмяВременногоФайла = ИмяВременнойПапки + "" + ИмяФайла;
ТабДок.Записать(ИмяВременногоФайла, ТипФайла.Значение);

Если ТипФайла.Значение = ТипФайлаТабличногоДокумента.HTML Тогда
ВставитьКартинкиВHTML(ИмяВременногоФайла);
КонецЕсли;			

Если ЗаписьZipФайла <> Неопределено Тогда 
ЗаписьZipФайла.Добавить(ИмяВременногоФайла);
Иначе
//ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
//ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор);
СписокФайлов.Добавить(ИмяВременногоФайла, ИмяФайла);
//	УдалитьФайлы(ИмяВременногоФайла);
КонецЕсли;
КонецЦикла;
КонецЦикла;

Если ЗаписьZipФайла <> Неопределено Тогда 
ЗаписьZipФайла.Записать();
ФайлАрхива = Новый Файл(ИмяАрхива);
//ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива);
//ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор);
СписокФайлов.Добавить(ИмяАрхива, ФайлАрхива.Имя);
КонецЕсли;

//УдалитьФайлы(ИмяВременнойПапки);

КонецПроцедуры

Кратко о том, что у нас изменилось. Мы убрали запихивание файла во временное хранилище, заменив на выходе ссылку во временное хранилище на путь к временному файлу. Чтобы в последующем воспользоваться созданными временными файлами было убрано удаление файлов, то есть удалять файлы нам придётся в дальнейшем после вложения в сообщение и записи. Для этого заново открываем модуль документа «ИсходящееЭлектронноеПисьмо» и модифицируем процедуру «ПередЗаписью» следующим образом:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

ОчиститьСообщения();

Если Не ВыполняетсяОтправка Тогда

Отказ = ПроверитьЗаполнениеСписковАдресатов();

Если Отказ = Истина Тогда
Возврат;
КонецЕсли;

КонецЕсли;


#Если Не ВебКлиент Тогда
МассивКаталоговДляУдаления=Новый Массив();
//Перебираем вложения и после помещения во временное хранилище удаляем их
Для Каждого Стр Из Вложения Цикл
Если Стр.Расположение = 2 Тогда
Если ЭтоАдресВременногоХранилища(Стр.ИмяФайлаНаКомпьютере) Тогда
Данные=ПолучитьИзВременногоХранилища(Стр.ИмяФайлаНаКомпьютере);
Иначе
Данные = Новый ДвоичныеДанные(Стр.ИмяФайлаНаКомпьютере);
КаталогДляУдаления="";
ФайлДляУдаления="";
ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(Стр.ИмяФайлаНаКомпьютере, КаталогДляУдаления, ФайлДляУдаления);
Стр.ИмяФайлаНаКомпьютере = ПоместитьВоВременноеХранилище(Данные, "");
МассивКаталоговДляУдаления.Добавить(КаталогДляУдаления);
УдалитьФайлы(Стр.ИмяФайлаНаКомпьютере);
КонецЕсли;
Стр.Расположение = 4;
КонецЕсли;
КонецЦикла;
//Удаляем папки оставшиеся от временных файлов
Для Каждого ФайлДляУдаления из МассивКаталоговДляУдаления Цикл
ТекущийФайл=Новый Файл(ФайлДляУдаления);
Если ТекущийФайл.Существует() Тогда
УдалитьФайлы(ФайлДляУдаления);
КонецЕсли;
КонецЦикла;
#КонецЕсли

Объект.ЕстьВложения = (Вложения.Количество() <> 0);

КонецПроцедуры

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

Сразу скажу что на этом список ваших проблем с почтой в УТ 11 только начинается. :D Думаю кому нибудь моя микростатейка поможет… Пока не забыл, если кто будет лазить по коду рекомендую обратить внимание на процедуру фонового задания для получения и отправки почты, там тоже имеются косяки… :angry:

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Ta4to

Дата регистрации: 01.03.2009
Сообщений: 13

Добрый вечер.<br>Ввожу информацию по договорам, прикрепляю к ним файлы с текстом договоров и иногда выскакивает ошибка<br>{Справочник.ХранилищеДополнительнойИнформации.Форма.ФормаСпискаФайловИИзображений(342)}: Ошибка при вызове конструктора (ДвоичныеДанные): Ошибка совместного доступа к файлу ‘путь документа'<br>Причем не понятно по каким причинам, то все нормально, то ошибка совместимости.<br>В чем может быть проблема не подскажите?<br>С уважением.<br>

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20882

Так ошибка не совместимости, а ошибка совместного доступа, а это разные вещи!

Ta4to

Дата регистрации: 01.03.2009
Сообщений: 13

И в чем может быть проблема?

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20882

Проблема в совместном доступе к файлу! Может быть его еще кто-то открыл?

Показывать по
10
20
40
сообщений

Читают тему:

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове com недопустимая строка с указанием класса
  • Ошибка при вызове конструктора двоичныеданные каталог не обнаружен
  • Ошибка при вызове 1004 bigbluebutton
  • Ошибка при вызове конструктора двоичные данные файл не обнаружен
  • Ошибка при вызова контекста при обмене данными