Файл e1cib tempstorage заблокирован обновление невозможно
В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».
Чем полезно временное хранилище:
- Не надо создавать объекты в конфигурации
- Доступно и с сервера и с клиента
- Можно записать любой объект
Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлении.
Синтаксис работы с хранилищем простой:
Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6» .
УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.
Чтобы получить из хранилища нужно только указать адрес:
Также можно удалить помещенный объект, используя адрес
Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип – «ДвоичныеДанные»
Метод асинхронной передачи файла на сервер
Обмен файлом между клиентом и сервером осуществляется через временное хранилище. Для помещения данных во временное хранилище правильно воспользоваться методом
НачатьПомещениеФайла ( ОписаниеОповещенияОЗавершении >, Адрес >, ПомещаемыйФайл >, Интерактивно >, УникальныйИдентификаторФормы >, ОписаниеОповещенияПередНачаломПомещенияФайла >)
Метод работает в асинхронном режиме. Возможны два варианта выбора файла для передачи на сервер:
- интерактивной режим, при котором пользователю будет выдан диалог выбора файла;
- неинтерактивный режим, при котором уже известен путь к требуемому файлу на компьютере клиента. Такое возможно, например, когда пользователь в отдельном поле ввода выбрал путь к обрабатываемому файлу. Такой сценарий описан в этой статье.
Параметр ОписаниеОповещенияОЗавершении содержит описание процедуры (тип ОписаниеОповещения), которая будет вызвана после завершения помещения файла во временное хранилище. Эта процедура должна иметь ключевое слово Экспорт и 4 параметра:
- Результат — для интерактивного режима возвращает результат работы пользователя с окном выбора файла. Истина — пользователь выбрал файл; Ложь — пользователь отказался от выбора;
- Адрес — адрес временного хранилища;
- ПомещаемыйФайл — путь к файлу;
- ДополнительныеПараметры — значение, указанное при создании объекта ОписаниеОповещения.
Следует обратить внимание на параметр УникальныйИдентификаторФормы. В него рекомендуется передавать идентификатор текущей формы для сохранения данных во временном хранилище между несколькими серверными вызовами. При закрытии формы данные из временного хранилища будут автоматически удалены.
Передача файла на сервер средствами БСП
В конфигурациях со встроенной Библиотекой стандартных подсистем для передачи файлов с клиента на сервер можно использовать процедуры
ЗагрузитьФайл ( ОбработчикЗавершения , ПараметрыЗагрузки = Неопределено, ИмяФайла = «» , АдресВоВременномХранилище = «» ) Экспорт
ЗагрузитьФайлы ( ОбработчикЗавершения , ПараметрыЗагрузки = Неопределено, ЗагружаемыеФайлы = Неопределено) Экспорт
общего модуля ФайловаяСистемаКлиент или
ВыбратьИПередатьФайлНаСервер ( ОповещениеЗавершения , Знач ПараметрыДиалога = Неопределено, Знач ИдентификаторФормы = Неопределено) Экспорт
общего модуля ОбменДаннымиКлиент.
Пример интерактивной загрузки файла на сервер средствами БСП:
&НаКлиенте
Процедура ЗагрузитьФайлИнтерактивно ( Команда )
ПараметрыДиалога = Новый Структура ;
ПараметрыДиалога . Вставить ( «Заголовок» , НСтр ( «ru = ‘Выберите файл XML’» ));
ПараметрыДиалога . Вставить ( «Фильтр» , НСтр ( «ru=’Файл XML (*.xml)|*.xml’» ));
Оповещение = Новый ОписаниеОповещения ( «ЗагрузитьФайлЗавершение» , ЭтотОбъект );
ОбменДаннымиКлиент . ВыбратьИПередатьФайлНаСервер ( Оповещение , ПараметрыДиалога , УникальныйИдентификатор );
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение (Знач РезультатПомещенияФайлов , Знач ДополнительныеПараметры ) Экспорт
Адрес = РезультатПомещенияФайлов . Хранение ;
ТекстОшибки = РезультатПомещенияФайлов . ОписаниеОшибки ;
ИмяВыбранногоФайла = РезультатПомещенияФайлов . Имя ;
Если ПустаяСтрока ( ТекстОшибки ) И ПустаяСтрока ( Адрес ) Тогда
ТекстОшибки = НСтр ( «ru = ‘Ошибка передачи файла на сервер’» );
Если НЕ ПустаяСтрока ( ТекстОшибки ) Тогда
ОбщегоНазначенияКлиентСервер . СообщитьПользователю ( ТекстОшибки );
Возврат;
Остались вопросы?
Спросите в комментариях к статье.
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Чтение из хранилища
В интернете есть множество примеров как на сервере записать полученные данные в базу, поэтому ниже приводится другой пример, когда файл полученный на сервере открывается для работы. В качестве такого файла используется XML.
Если мы имеем дело с файлами, то может оказаться удобным метод ПоместитьФайл. Он преобразует файл в двоичные данные и записывает их во ВременноеХранилище. При этом параметром можно настроить открытие диалогового окна для выбора файла. Сделаю оговорку, этот метод нельзя использовать на сервере.
В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.
Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл."КопияФайла.xml" – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,"Копияфайла.xml" , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод
В общем случае клиент и сервер 1С — это разные компьютеры с различной файловой системой. Рассмотрим как правильно передать файл с компьютера клиента на компьютер сервера.
Неинтерактивная передача файла на сервер
Рассмотрим пример неинтерактивной передачи файла на сервер, без вызова окна выбора файла:
&НаКлиенте
Процедура ЗагрузитьФайл ( Команда )
ИмяФайлаДляОбработки = «C:ДанныеДляЗагрузки.xml» ;
// Описание процедуры, которая будет вызвана помещения файла во временное хранилище
ОписаниеОповещения = Новый ОписаниеОповещения ( «ЗагрузитьФайлЗавершение» , ЭтотОбъект );
// Начало помещение файла из файловой системы во временное хранилище
НачатьПомещениеФайла ( ОписаниеОповещения , , ИмяФайлаДляОбработки , Ложь, УникальныйИдентификатор );
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение ( Результат , Адрес , ВыбранноеИмяФайла , ДополнительныеПараметры ) Экспорт
&НаСервере
Процедура ВыполнитьЗагрузкуНаСервере ( Адрес )
// Получение данных из временного хранилища
Данные = ПолучитьИзВременногоХранилища ( Адрес );
// Получение имени временного файла
ИмяВременногоФайла = ПолучитьИмяВременногоФайла ( «xml» );
// Сохранение данных во временный файл
Данные.Записать ( ИмяВременногоФайла );
// Хорошим тоном будет удалить временный файл
Попытка
При интерактивном выборе файла дополнительно необходимо предусмотреть два момента:
- указать настройки диалога выбора файла (если требуется);
- проверять, что пользователь действительно выбрал файл.
Помещение в хранилище
Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище
Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Ошибка при вызове метода контекста (Подключить)
Имя = ВнешниеОтчеты.Подключить(АдресВХранилище);
по причине:
Ошибка подключения внешних метаданных
по причине:
Неправильный путь к файлу 'e1cib/tempstorage/dfbfec9b-2d93-496e-8f17-7c8429312d6
Что я делаю не так?
(2) demarine,
Адрес собственно вот e1cib/tempstorage/dfbfec9b-2d93-496e-8f17-7c8429312d6 Тип Строка
В синтакс-помощнике на эту тему:
ВнешниеОтчетыМенеджер (ExternalReportsManager)
Подключить(, , )
.
(обязательный) Тип: Строка.
.
Выполняет подключение внешнего отчета по указанному пути. В качестве пути может использоваться только путь к данным в конфигурации и базе данных.
Возвращает имя подключенного внешнего отчета.
.
Я так понимаю что e1cib/tempstorage/dfbfec9b-2d93-496e-8f17-7c8429312d6 и есть путь в базе данных. Или я не прав?
Я так понимаю что e1cib/tempstorage/dfbfec9b-2d93-496e-8f17-7c8429312d6 и есть путь в базе данных. Или я не прав
Да это типо Навигационная ссылка.
НавигационнаяСсылка (URL)
Использование:
Чтение и запись.
Описание:
Сервер, толстый клиент, внешнее соединение.
В управляемом приложении этот метод ВнешниеОбработки.Подключить(АдресХранилища); работал но если его запустить в обычном выдавало туже ошибку.
(5) lehis_S, Действительно, только что проверил тот же самый код в управляемом приложении работает. Странно что нигде нет упоминания что это фишка только управляемого приложения.
(5) lehis_S, (6) invertercant, (7) unknownDaemon,
для Толстого клиента похоже не нужен метод Подключить ()
Ты не адрес а путь указывай:
ИмяФайлаОбработки = ПолучитьИмяВременногоФайла("epf);
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
ДвоичныеДанные.Записать(ИмяФайлаОбработки);
ИмяОбработки = ВнешниеОбработки.Подключить(ИмяФайлаОбработки);
Обработка = ВнешниеОбработки.ИмяОбработки.Создать();
Данные в хранилще есть. В элемент они попадают, но при открытии элемента картикнка не видна, что сделал не так.
ДанныеАдрес (Строка) Реквизит элемента спр.
&НаСервереПроцедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение) ТаблицаФайлов = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресХЗ); Для Каждого СтрокаФайл Из ТаблицаФайлов Цикл Файл = Новый Файл(СтрокаФайл.Значение.Имя); ХранимыйФайл = Справочники.ХранилищеДанныхСправочники.СоздатьЭлемент(); ХранимыйФайл.СсылкаНаОбъект = СсылкаНаОбъект; ХранимыйФайл.Наименование = Файл.Имя; ХранимыйФайл.ДанныеПуть = Файл.Путь; ХранимыйФайл.ДанныеТекущаяДата = ТекущаяДата();
// . ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных()); ХранимыйФайл.Записать(); КонецЦикла; Элементы.Список.Обновить(); КонецПроцедуры
Как-то у тебя сложно или я чего-то не понял, вообщем так:
Действия по установке (загрузке) картинки и ее отображения на форме нашего справочника Сотрудника необходимо выполнять на стороне сервера. Это особенность работы системы с файлами. Именно для этого в тексте процедуры ДобавитьКартинку осуществляется вызов другой процедуры УстановитьКартинку(), которая будет выполняться на сервере.
В программном модуле, ниже процедуры ДобавитьКартинку(Команда) пишем следующий программный код:
Чтобы при открытии картинка отобразилась:
1) я в ообщей форме помещаю данные в ХранилищеЗначений. (данные заполнены)
2) При нажатии кпонки на общей форме создаются элементы справочника. Все данные из хранилища заполняются в элементе спр, а вот с картикой проблема. Я сейчас еще разок книгу читану. Где то рядом брожу.(Процедура ОбработкаВыбора)
&НаСервереПроцедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение) ТаблицаФайлов = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресХЗ); Для Каждого СтрокаФайл Из ТаблицаФайлов Цикл Файл = Новый Файл(СтрокаФайл.Значение.Имя); ХранимыйФайл = Справочники.ХранилищеДанныхСправочники.СоздатьЭлемент();
.ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных());
Если написать (выбараю 2 картинки)
Этот алгоритм не отрабатывает..
ХранимыйФайл.ДанныеХЗ = Новый ХранилищеЗначения(СтрокаФайл.Значение.Хранение, Новый СжатиеДанных());
Да нет управляемая.
Для того что бы избавиться от модальности я решил передавать данные через хранилище.
Вот алгорит выгрузки из общей формы
блин. да что с синтаксисом ;( капец какой-то
E_Migachev, объясни как нужно вставлять наверно с видео
(12) да, напишу вечерком
для bell:
в управляемых формах принцип следующий:
Простой пример справочника с картинкой
Отображения картинки текущего элемента списка
В новой версии платформы 1С 8.2 работа с картинками производится отличным от предыдущих платформ методом, разобраться с которым без примеров сложно. Подробно можно прочитать в книге Разработка управляемого интерфейса глава 3.18. Работа с файлами и картинками. Примеры данной статья являются переработанными и дополненными примерами книги.
Картинка как и раньше (8.1) хранится в базе в реквизите (реквизите ТЧ) с типом ХранилищеЗначения, но записать данные в реквизит с этим типом обычном способом нельзя, запись производится в предопределенной процедуре «ПередЗаписьюНаСервере».
Для отображения картинки создается элемент формы поле картинки, данными для которого, является реквизит формы (с типом Строка(0)), содержащий навигационную ссылку на картинку (можно получить функцией «ПолучитьНавигационнуюСсылку») или адрес во временном хранилище (пол.ф. «ПоместитьФайл»)
Ниже приведен код части примера:
В книге Разработка управляемого интерфейса используется дополнительно поле для сохранения имени файла оно необходимо если нужно чтобы программа запомнила из какой папки пользователь предпочитает добавлять или выгружать файлы.
В процедуре ПриЗаписиНаСервере на первый взгляд можно убрать код удаление из временного хранилища т.к. ф. ПоместитьФайл вызывается с параметром УникальныйИдентификатор формы т.е. объект хранилища будет существовать до закрытия формы, но рекумендуется освобождать ресурсы сразу (если пользователь загрузит картинку и нажмет записать, форма не закрыта и объект будет существовать до закрытия).
Если Вам интересна эта тема, то вы уже знаете, какие есть возможности по защите кода модулей, внешних обработок и отчетов. Это расширение конфигурации для защиты внешних обработок от просмотра и редактирования кода.
Каждый из Вас сам решает, где ставить запятую. Те, кто ставит запятую после первого слова, могут посмотреть и оставить свои комментарии. Те же, кому приходилось сталкиваться с "хитрым" заказчиком, могут воспользоваться этим расширением.
Расширение для защиты внешних обработок. Несмотря на свой столь малый размер и количество кода, решает часть вопросов исполнения и защиты внешних обработок:
- Обработка, передаваемая заказчику, закодирована;
- Кодер/Декодер закодирован (обфусцирован, байт код защищен, тексты удалены);
- Исходный текст обработки при выполнении не изменен (что позволяет быстро идентифицировать ошибки);
Теперь коротко о том, как это работает:
- Необходимо установить обработку в любую конфигурацию в режиме управляемого приложения, интерфейс управляемых форм (если проект будет развиваться, будут и обычные формы);
- Если считаете необходимым, настройте безопасный режим и защиту от опасных действий (если такой необходимости нет, отключите их);
- Используя обработку «МиниБлок» включенную расширение закодируйте Вашу обработку (в архиве есть тестовая обработка);
- Используя обработку «МиниБлок» включенную расширение откройте Вашу закодированную обработку;
Логика открытия кодированной обработки:
Модуль формы обработки открыт. Ниже приводится только фрагмент позволяющий понять как происходит работа с закодированной обработкой:
Модуль менеджера объекта закодирован. Листинг этого модуля без алгоритма кодирования/декодирования предоставлен в полном объеме ниже:
Модуль объекта пустой, но так как поставка не разделяет типы модулей, он оказался тоже без текста.
Механизм защиты реализован в модуле обработки в связи с тем, что некоторые приложения работают в режиме совместимости версии 8.3.8 в котором нет возможности расширениями добавлять свои общие модули. Тестировалось на версии 8.3.10.2252 в обычном режиме работы и в режиме совместимости 8.3.8.
В данном расширении реализован только функционал работы с внешними обработками.
Востребована ли эта тема и нужно ли ее развивать?
Если тема будет интересна, то легким движением руки функционал расширяется для отчетов. А как максимальное развитие – расширение БСП для работы с кодированными обработками и отчетами.
Как вы видите функционирование кодера в данном расширении ограничено датой 31.12.2018.
Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.
Спарка УТиВСК - Ошибка лицензирования : :, Добрый день! После обновления системы СЛК не работает система CRMОбщийМодуль.слкМенеджерЗащиты.Модуль(578)>
Добрый день!
После обновления системы защиты из дистрибутива Спарки УТиВСК релиз 3.0.22.5 Выходит ошибка:
____________________________________________________________ ____________________________________________________________ ___________
Ошибка лицензирования : : Ошибка лицензирования (52BA): Ошибка создания менеджера объектов СЛК: : Ошибка при вызове метода контекста (Подключить): Ошибка подключения внешних метаданных: Ошибка при выполнении файловой операции 'e1cib/tempstorage/7a50fe9c-8f51-4d63-b47b-a536ad14d86e?seanceId=b0585906-69d5-4762-99e3-95ea159caf56': Неверный формат хранилища данных 'e1cib/tempstorage/7a50fe9c-8f51-4d63-b47b-a536ad14d86e?seanceId=b0585906-69d5-4762-99e3-95ea159caf56'
____________________________________________________________ ____________________________________________________________ ______________
Уточните, пожалуйста, версию сервера СЛК и компоненты СЛК. Сервер СЛК установлен там же, где сервер 1С?
Добрый день!
На компьютере установлен Сервер СЛК 3.0.25.9395. Компоненты СЛК были обновлены вместе с сервером СЛК. Ключ - программный. На этом же компьютере запускается файловая база "Спарка УТиВСК " релиз 3.0.22.5
Просьба уточнить ещё платформу 1С:Предприятие.
А также прислать логи работы компоненты, они будут направлены в службу Катран Софт (лог нужен в момент возникновения ошибки):
Где %LocalAppData% - папка настроек пользователя, от имени которого запущен процесс 1С.
По умолчанию логи хранятся только для текущей сессии работы. Для их сохранения установите в конфигурационном файле компоненты соответствующий режим:
[Common]
; Хранить логи предыдущих сеансов работы
KeepPreviousLogs=1
Интерактивная передача файла на сервер
Рассмотрим, пример интерактивной передачи файла на сервер:
&НаКлиенте
Процедура ЗагрузитьФайлИнтерактивно ( Команда )
// Описание процедуры, которая будет вызвана после закрытия окна выбора файла
ОписаниеОповещения = Новый ОписаниеОповещения ( «ЗагрузитьФайлЗавершение» , ЭтотОбъект );
// Описание диалога выбора файла
Диалог = Новый ДиалогВыбораФайла ( РежимДиалогаВыбораФайла . Открытие );
Диалог . Фильтр = НСтр ( «ru=’Файл XML (*.xml)|*.xml’» );
// Начало помещение файла из файловой системы во временное хранилище
НачатьПомещениеФайла ( ОписаниеОповещения , , Диалог , Истина, УникальныйИдентификатор );
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры ) Экспорт
// Файл выбран
ВыполнитьЗагрузкуНаСервере ( Адрес );
// Пользователь отказался от выбора файла
Сообщить ( «Файл не был выбран» );
Процедура ВыполнитьЗагрузкуНаСервере при интерактивном и неинтерактивном режимах одинаковая.
Читайте также: