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

(0) Вот тебе открытие

&НаКлиенте

Процедура ЗагрузитьДеревоИзФайла(Команда)

    
    ОписаниеОповещения = Новый ОписаниеОповещения(«ОбработатьВыборФайла», ЭтаФорма);

    
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

    ДиалогОткрытияФайла.Фильтр                      = «Файлы Дерева (*.tab) |*.tab»;

    ДиалогОткрытияФайла.Заголовок                   = «Укажите имя файла для открытия!»;

    ДиалогОткрытияФайла.ПредварительныйПросмотр     = Ложь;

    ДиалогОткрытияФайла.МножественныйВыбор          = Ложь;

    ДиалогОткрытияФайла.Расширение                  = «tab»;

    
    НачатьПомещениеФайлов(ОписаниеОповещения, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

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

&НаКлиенте

Процедура ОбработатьВыборФайла(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт

    Если ПомещенныеФайлы = Неопределено Тогда

        Возврат;

    КонецЕсли;

    Для каждого ПереданныйФайл Из ПомещенныеФайлы Цикл

        ВосстановитьДеревоНаФорме(ПереданныйФайл.Хранение);

    КонецЦикла;

    
КонецПроцедуры // ()

&НаСервере

Процедура ВосстановитьДеревоНаФорме(КлючФайлаДерево)

    
    Попытка

        ИмяВремФайл = ПолучитьИмяВременногоФайла();

        ФайлДанные = ПолучитьИзВременногоХранилища(КлючФайлаДерево);    

        ФайлДанные.Записать(ИмяВремФайл);

        тДерево = ЗначениеИзФайла(ИмяВремФайл);

    
        УдалитьФайлы(ИмяВремФайл);

        ЗначениеВРеквизитФормы(тДерево, «ДеревоОстатков»);

    Исключение

        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки()); //сообщение пользователю

    КонецПопытки;

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

Ну совершенно верно так и должно быть у каждого с версией 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:

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



Обновлено: 13.06.2023

Как правило, ошибка возникает при фоновом обмене данными между базами 1С или запуске синхронизации вручную. Что делать при появлении этой ошибки и куда смотреть.

Текст: «Ошибка при вызове конструктора (COMObject) по причине: -2147221005(0x800401F3): Недопустимая строка с указанием класса».

Решение — в регистрации библиотеки comcntr.dll из каталога программы для корректного вызова COMConnector.

Подготовительные действия

  • отключите службу Агента сервера 1С:Предприятия и программы, возможно использующие регистрируемую DLL;
  • если ранее использовалась библиотека устаревшей версии, удалите регистрацию comcntr.dll, запустив команду вызова regsvr32 с ключом /u.

Подходы к решению

В командной строке с правами Администратора выполните команду:

2. Переустановка платформы с внесением исправлений

  • запускаем консоль «Службы компонентов»;
  • добавляем новый элемент, переходим «Компьютеры» — «Мой компьютер» — из списка выбираем «Приложения COM+»;
  • выбираем «Создать» — «Приложение»;
  • в Мастере установки выбираем второй вариант «Создать новое приложение», в поле «Введите имя нового приложения:» вводим «V83COMConnector», «Способ активации» устанавливаем «Серверное приложение», нажимаем «Далее»;
  • выбираем учетную запись под которой запускается приложение, по умолчанию — «Текущий (вошедший в систему) пользователь»;
  • на этапах «Добавление ролей приложения» и «Добавление пользователей для ролей» нажимаем «Далее», а затем «Готово».

В ветке только что созданного приложения переходим в подветку «Компоненты» и создаем компонент:

  • в контекстном меню выбираем «Создать» — «Компонент»;
  • кликаем по первому варианту «Установка новых компонентов»;
  • в открывшемся диалоге выбираем необходимый файл comcntr.dll и нажимаем «Открыть»;
  • нажимаем «Далее» и «Готово».

Обратите внимание: после установки измените свойства объекта. Для этого переходим к ветке V83COMConnector:

  • открываем свойства созданного компонента, переходим в ветку V83COMConnector — «Свойства»;
  • на вкладке «Безопасность», в «Авторизация» снимаем флаг «Принудительная проверка доступа для приложений»;
  • в «Политика программных ограничений» устанавливаем флаг «Применить политику программных ограничений» и выбираем «Уровень ограничений:» — «Неограниченный»;
  • нажимаем «Применить» — «ОК».

Полная версия со снимками экранов — в статье на Дзен-канале.

Использование COMOбъектов в 1С это прошлый век, сейчас уже ни кто так не пишет. Раньше с его помощью реализовали печать документов. Они выгружались в OpenLibre Office и от туда уже печатались.

Появиться такая ошибка может после

1 Обновления платформы

2 Переустановки ОС и 1С

3 Обновление конфигурации

4 Проблем с офисными пакетами

Это самые распространенные.

Три способа избавиться от ошибки «Ошибка при вызове конструктора…»

И так после каких либо манипуляций с 1С у вас стала появляться ошибка.

Первый способ

Самое простое это переустановить офисные пакеты OpenLibre, так же как вариант если у вас стоял Open поставить Libre и на оборот. Это нужно для того чтобы обновить специальный компонент.

Второй способ

Попробовать зарегистрировать самостоятельно, для этого запускаем командную строку от имени администратора, переходим в каталог введя команду.

regsvr32 «C:Program Files (x86)1cv88.3.16.18.14comcntr.dll»

Кстати данную манипуляцию нужно проводить на сервере.

Третий способ

Установить 32 битную версию клиента 1С, можно даже поверх х64. В итоге у вас появиться два ярлычка для запуска, один для х32 второй х64.

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

Версию можно указать и в ярлыке запуска 1С.

Можно еще попробовать самостоятельно создать COM + , но лично из своего опыта могу сказать это не помогает. Самый действенный вариант это установка х32 клиента. Так как компонента которая необходимо работает только с х32.

Так же проблема может быть непосредственно в самом коде.

Ошибка (COMOбъект) : 1 комментарий

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

Начиная с версии технологической платформы 8.3.9 средства для работы с двоичными данными претерпели существенные изменения. В этой статье я постараюсь рассказать как о старых, так и о новых инструментах для работы с двоичными данными. При написании статьи использовалась версия технологической платформы 8.3.12

Общая информация

Если раньше, до версии технологической платформы 8.3.9, мы располагали только объектом ДвоичныеДанные, то к настоящему времени у нас имеется целый набор объектов, которые серьезно расширяют наши возможности по манипуляциям с двоичными данными. Рассмотрим все эти объекты чуточку подробнее.

Двоичные данные

Экземпляры объекта ДвоичныеДанные содержат двоичные данные, которые считываются из файла. При это объект ДвоичныеДанные является достаточно многофункциональным — мы можем:

  • читать двоичные данные из файла и записывать их в файл;
  • передавать их между клиентом и сервером при помощи временного хранилища;
  • передавать и получать их по сети;
  • хранить их базе данных в реквизитах вида ХранилищеЗначения;
  • превратить двоичные данные в объект вида Картинка (при определенных условиях конечно);
  • хранить двоичные данные в макетах;
  • шифровать и расшифровывать, подписывать и проверять подписи;

Наверняка я что-то пропустил, но главное должно быть понятно — несмотря на значительное развитие средств работы с двоичными данными, объект ДвоичныеДанные остается ключевым.

Потоки

Это группа объектов назначение которых заключается в работе с потоками данных.

Поток — этот объект представляет собой поток данных из которого можно читать и/или записывать в него данные. Данный объект не имеет конструктора, а получить экземпляр объекта можно при помощи различных методов других объектов.

ФайловыйПоток — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в файлах на диске.

ПотокВПамяти — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в оперативной памяти.

МенеджерФайловыхПотоков — этот объект предоставляет типовые методы для работы с файлами (открытие и создание). Создать экземпляр этого объекта нельзя — имеется объект глобального контекста ФайловыеПотоки который и предоставляет доступ к методам менеджера.

Чтение и запись

ЧтениеДанных — этот объект предназначен для чтения различных типов данных из различных источников (потоки, файлы, двоичные данные).

РезультатЧтенияДанных — этот объект содержит описание результата чтения данных из потока. Объект не имеет конструктора, получить экземпляр объекта можно при помощи методов других объектов.

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

ЗаписьДанных — этот объект предназначен для записи различных типов данных в приемник.

Практическая часть

Итак, у нас достаточно много различных объектов, которые, в свою очередь, имеют много разных свойств и методов. Разобраться во всем этом более подробно помогут практические примеры, к ним и перейдем.

Многие объекты — ДвоичныеДанные, Поток, ФайловыйПоток, ПотокВПамяти, ЧтениеДанных, ЗаписьДанных, РезультатЧтенияДанных имеют пары синхронных и асинхронных методов, например: ЗаписатьНачатьЗапись, ЗакрытьНачатьЗакрытие. Асинхронные методы нужны для обеспечения возможности одинаковой работы и в тонком клиенте, и в веб-клиенте.

Подробнее про синхронные и асинхронные методы можно прочесть в этой статье.

Двоичные данные

Ниже приведены примеры основных операций с объектом ДвоичныеДанные.

Анна Викулина

Двоичные данные платформы 1С:Предприятие – это универсальный объект встроенного языка программирования для работы с файлами. Благодаря объекту ДвоичныеДанные можно любой файл представить в виде последовательности байт. Объект доступен в тонком клиенте, веб-клиенте, мобильном клиенте, на сервере, толстом клиенте, внешнем соединении, мобильном приложении (клиент/сервер).

Объект сериализуется

Данный объект может быть сериализован в/из XML, может использоваться в реквизитах управляемой формы, а также он может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен . Имя типа XDTO может быть любым из перечисленных: base64Binary, hexBinary.

Благодаря тому, что двоичные данные доступны и на клиенте, и на сервере, мы можем смело передавать файл в виде двоичных данных с клиента на сервер, однако рекомендованный «шаблон» для передачи файла – использовать хранилище значений.

Задачи, для решения которых можно использовать двоичные данные:

Работа с двоичными данными:

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

Примеры по работе с двоичными данными

Самый очевидный пример, где применяются двоичные данные, – сохранение файла в базе данных. Для хранения файла в виде двоичных данных необходимо в объекте добавить реквизит с типом «ХранилищеЗначений». Далее представлен пример кода по работе с реквизитом (заполнение значения и получение значения).

Заполнение:

Получение (фрагмент кода, выполняемый на сервере):

Рассмотрим еще один пример: скачивание картинки из интернета и отображение ее на управляемой форме. Для этого также добавляем реквизит с типом ХранилищеЗначения, в котором будет помещаться картинка в двоичном формате.

Рис.1 Скачивание картинки из интернета

Рис.1 Скачивание картинки из интернета

Функция, скачивающая картинку из интернета:

Использование функции:

Теперь у нас в реквизите «Аватар» лежат двоичные данные картинки. Чтобы картинку вывести на управляемую форму, необходимо добавить реквизит формы «Тип строка», перекинуть его на форму (drag-and-drop), либо создать самостоятельно элемент формы, указав в поле «Путь к данным» наш реквизит «Картинка», после чего изменить вид на «Поле картинки».

Рис.2 Поле картинки

Рис.2 Поле картинки

По событию ПриСозданииНаСервере

Готово, на форме у нас картинка.

Двоичные данные и потоки

Говоря о двоичных данных, стоит упомянуть о возможности работы с потоками. Она появилась относительно недавно, а именно в версии 8.3.9. Чтобы потоком можно было читать из двоичных данных, применяется метод ОткрытьПотокДляЧтения. Допустим, у нас в базе данных лежит заархивированный xml-файл (как хранить файлы в базе данных рассматривалось ранее). Нам нужно вывести пользователю содержимое этого файла, или у вас настроен какой-то обмен, и вы передаете файлы в заархивированном виде (для экономии трафика).

Последовательность действий при работе с двоичными данными без использования потоков:

  • Получить двоичные данные из базы;
  • Записать их во временный файл;
  • Разархивировать;
  • Удалить временный файл;
  • Прочитать разархивированный файл.

Последовательность действий при работе с потоками:

  • Получить двоичные данные из базы;
  • Открыть поток для чтения;
  • Разархивировать;
  • Прочитать разархивированный файл.

Пример кода без использования потоков:

Пример кода по работе с потоком:

Если диск у вас на SSD, рекомендую использовать потоки не только в примере с архивацией, а везде, где это возможно. Да, в данном примере все же происходит запись на диск (разархивация), но будем надеяться, когда-нибудь 1С реализует метод двоичных данных ОткрытьПотокДляЗаписи.

Работа с Base64

Base64 – это стандарт, позволяющий кодировать двоичные данные в виде строки (для кодирования используется 64 символа таблицы ASCII, отсюда и название). Тип ДвоичныеДанные сериализуем, то есть его можно представить в виде XML, для этого применяется объект встроенного языка СериализаторXDTO. После сериализации данные представлены одним узлом base64Binary, содержимое которого есть последовательность байт, закодированная в формате Base64.

строка в Base64

Платформа 1С также позволяет кодировать двоичные данные, не прибегая к сериализации. Для этого есть две функции:

Они преобразуются в Base64 и обратно в двоичные данные.

Если у вас остались вопросы по работе с двоичными данными в среде 1С:Предприятие, обратитесь к нашим специалистам и получите консультацию по 1С 8.3 или воспользуйтесь услугами по сопровождению 1С.

Первое что нужно сделать, это запустить командную строку от имени администратора.

В командной строке Windows набираете cmd , в писке выбора появится программа с таким названием, устанавливаете курсор на эту программу и выбираете из контекстного меню «Запуск под администратором» (см. картинку ниже).

Запуск командной строки от имени администратора

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

1. regsvr32 «C:Program Files (x86)1cv8[ версия платформы ]bincomcntr.dll»

2. C:Program Files (x86)1cv8[ версия платформы ]bin>regsvr32 comcntr.dll

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

командная строка

Для смены каталога нужно написать cd , после которого установить пробел, а затем указать тот путь, который нам нужен, например C : Program Files ( x 86)1 cv 8[версия платформы] bin , затем после указания пути к каталогу нажимаете Enter . Смотрите пример смены каталога на картинке ниже.

смена каталога в cmd

Вот теперь рядом с каталогом можно ввести regsvr 32 comcntr . dll , нажать Enter и зарегистрировать компоненту (смотрите пример на картинке ниже).

запуск regsvr3

успешное выполнение регистрации компоненты comcntr.dll

Если компоненту не удалось зарегистрировать, проверьте как вы запустили командную строку, возможно, что забыли запустить от имени администратора. Если все в порядке, то нужно отключить службу агента сервера 1С:Предприятия и все программы, использующие эту DLL.

Читайте также:

      

  • Самолет из конструктора пластмассового
  •   

  • Знакомство с лего конспект урока
  •   

  • Как собрать авианосец из лего
  •   

  • Мстители lego на андроид
  •   

  • Лего формат вардек кухни

Описание ошибки:
Обнаружена при разработке обработки для изменения содержимого файла формата XML в серверной базе 1С 8 в режиме управляемого приложения. При тестировании на сервере ошибка не возникала. Проявила себя при работе на рабочем месте пользователя.

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

1С 8 ошибка файл не обнаружен при чтении файла

По факту ошибка возникала при выполнении метода «Прочитать()» для объекта «ТекстовыйДокумент». Как было отмечено, при тестировании работы обработки непосредственно на сервере данной ошибки не возникало. Она проявила себя уже при попытке работы на другом рабочем месте. Обработка разрабатывалась для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая работает в режиме управляемого приложения — это необходимо отметить. Т.к. это проясняет причины возникновения проблемы.

По привычке разместил операции по чтению содержимого текстового файла и извлечению его содержимого на стороне сервера — см. «&НаСервере» перед процедурой «ОбрабткаНаСервере()». Клиент-серверная архитектура платформы 1С: Предприятие 8.3, казалось бы, к этому обязывала. 

1с 8.3 при чтении файла пишет, выводит ошибку: Файл не обнаружен

В итоге получалось, что платформа на клиентском рабочем месте искала файл по указанному пути на сервере, где развернут сервер 1С: Предприятия 8 исходя из директивы «&НаСервере», а не на рабочем компьютере, где была запущена обработка.

Но, как оказалось позже — конструктор «Новый ТекстовыйДокумент», методы «Прочитать()», «ПолучитьТекст()» — все они доступны не только на стороне сервера, но и на стороне тонкого и толстого клиента. Поэтому замена директивы «&НаСервере» на «&НаКлиенте» решила проблему.

1С 8 Ошибка при вызове метода контекста (Прочитать)

Если по какой-то причине окажется, что я не совсем ясно объяснил суть проблемы, то вот еще обсуждение на форуме mista.ru, где данная пробелма обсуждается несколько другими словами: 1с 8.3 при чтении файла пишет: Файл не обнаружен

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




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

02-11-2020

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

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