В связи с новым подходом в программировании на платформе 8.2 возникла необходимость передачи данных между клиентом и сервером при этом прямая передача в виде параметров имеет ряд ограничений. И тогда был введен объект «Временное хранилище».
Чем полезно временное хранилище:
- Не надо создавать объекты в конфигурации
- Доступно и с сервера и с клиента
- Можно записать любой объект
Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлении.
Синтаксис работы с хранилищем простой:
Передав параметром, данные которые хотим поместить(Посылка) и УникальныйИдентификатор получаем Адрес, по которому потом можно будет обратиться. Причем передаваемый идентификатор не является получаемым в последствии адресом. Вместо идентификатора можно передать строку Адреса, по которому и будет помещено наше значение, но это не любая строка! Строка Адреса выглядит примерно вот так «e1cib/tempstorage/ae5c5472-0266-4892-9073-20392dd5a6a6» .
УникальныйИдентификатор может быть как новый так и существующей формы, в последнем случае значение в хранилище будет храниться пока существует форма. Если не передать уникальный идентификатор, то при следующем серверном вызове значение уже будет удалено.
Чтобы получить из хранилища нужно только указать адрес:
Также можно удалить помещенный объект, используя адрес
Если помещаемые данные не являются объектами конфигурации, то для того чтобы их поместить нужно перевести в доступный тип — «ДвоичныеДанные»
Содержание
- Помещение в хранилище
- Чтение из хранилища
- Содержание
- В хранилище значения можно сохранить почти любую информацию, например,
- Работа с файлами и картинками во встроенном языке 1С:Предприятия 8
- Назначение
- Область действия методов
- Описание методов работы с файлами
- Сохранение данных во временное хранилище
- Получение файла из временного хранилища
- Удаление файла из временного хранилища
- Проверка адреса на принадлежность временному хранилищу
- Получение адреса реквизита
- Получение файла из информационной базы
- Пример использования файловых методов
- Поддержка адресов в поле картинки
- Ограничения при работе с Веб-клиентом
- Особенности при работе с ХранилищемЗначений на Клиенте
Помещение в хранилище
Здесь мы сначала преобразуем файл в формат двоичных данных и только потом помещаем их в хранилище
Чтение из хранилища
В интернете есть множество примеров как на сервере записать полученные данные в базу, поэтому ниже приводится другой пример, когда файл полученный на сервере открывается для работы. В качестве такого файла используется XML.
Если мы имеем дело с файлами, то может оказаться удобным метод ПоместитьФайл. Он преобразует файл в двоичные данные и записывает их во ВременноеХранилище. При этом параметром можно настроить открытие диалогового окна для выбора файла. Сделаю оговорку, этот метод нельзя использовать на сервере.
В параметре Адрес, можно указать Адрес в который нужно записать файл, если нужен новый адрес, то нужно передать пустую строку.
Истина – открывает окно для выбора папки и имени файла, при значении Истина есть возможность открыть файл."КопияФайла.xml" – Имя файла под которым будет сохранен файл.Адрес – это адрес в хранилище,ПолучитьФайл(Адрес,"Копияфайла.xml" , Истина);Чтобы сохранить файл из временного хранилища на Клиенте можно использовать метод
Содержание
В хранилище значения можно сохранить почти любую информацию, например,
. картинки (фотки):
ТекИзображение.Объект = СпрТкани.Ссылка; ТекИзображение.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение; Хранилище = Новый ХранилищеЗначения(НоваяКартинка, Новый СжатиеДанных()); ТекИзображение.Хранилище = Хранилище.Получить();
// в этом месте он все выводит . ЭлементыФормы.ПолеКартинки1.Картинка = Хранилище.Получить(); ТекИзображение.Записать();
. табличный документ:
. произвольные файлы (двоичные данные):
ХЗ = Новый ХранилищеЗначения(Новый ДвоичныеДанные(файл));
Восьмерка поддерживает сжатие данных, помещаемых в хранилище:
ХЗ = Новый ХранилищеЗначения(Новый ДвоичныеДанные(файл),Новый СжатиеДанных(9));
. внешние обработки и отчеты:
Работа с хранилищем
Если это были ДвоичныеДанные, то их можно восстановить из хранилища значения методом Получить и записать в файл методом Записать().
Если ТипЗнч(Хранилище) <> Тип("ДвоичныеДанные") Тогда
Если это был, например, Word-документ (doc-файл, или другой файл зарегистрированного типа), то его можно открыть так:
Чтобы очистить поле типа Хранилище значения, нужно присвоить ему Неопределено:
Работа с файлами и картинками во встроенном языке 1С:Предприятия 8
Назначение
В управляемом приложении реализован новый механизм работы с файлами. Он обеспечивает обмен файлами между информационной базой и клиентским приложением. Особенностью данного механизма является то, что он ориентирован на использование в тонком клиенте и Веб-клиенте и разработан с учетом ограничений на работу с файлами, накладываемыми веб-браузерами.
Механизм представляет собой набор методов, с помощью которых можно поместить данные, хранящиеся локально у пользователя, во временное хранилище информационной базы, перенести эту информацию из временного хранилища в базу данных и получить ее обратно на компьютер пользователя. Наиболее распространенные прикладные задачи, решаемые этим механизмом, – это хранение сопроводительной информации, например, изображений товаров, связанных с договорами документов и т. п.
Область действия методов
Временное хранилище
Временное хранилище — это специализированная область информационной базы, в которую могут быть помещены двоичные данные. Основное назначение – это временное хранение информации при клиент-серверном взаимодействии до ее переноса в базу данных.
Необходимость во временном хранилище возникает из-за того, то в модели работы веб-браузера требуется передать выбранный пользователем файл непосредственно на сервер без возможности его хранения на клиенте. При передаче файла он помещается во временное хранилище и уже потом может быть использован при записи объекта в базу данных.
Наиболее типичная решаемая временным хранилищем прикладная задача – обеспечение доступа к файлам или картинкам до того, как объект будет записан в информационную базу, например, в форме элемента.
Файл или двоичные данные, помещенные в хранилище, идентифицируются уникальным адресом, который в дальнейшем можно использовать в операциях записи, чтения или удаления. Этот адрес выдают методы записи файла во временное хранилище. Отдельный метод во встроенном языке позволяет определить, является ли переданный адрес адресом, указывающим на данные во временном хранилище.
Информационная база
Механизм позволяет получить доступ к двоичным данным, хранящимся в реквизитах типа ХранилищеЗначений.
Как и в случае временного хранилища, доступ к информации возможен через специальный адрес. Получить его можно через специальный метод, передав ссылку на объект или ключ записи регистра сведений, и имя реквизита. В случае табличной части дополнительно требуется передать и индекс строки табличной части.
Методы работы с файлами имеют ограничение при работе с реквизитами информационной базы. Для них, в отличие от временного хранилища, доступно только чтение информации, но не ее запись или удаление.
Описание методов работы с файлами
Сохранение данных во временное хранилище
Наиболее типичный сценарий использования данного механизма предусматривает первоначальное размещение данных пользователя во временное хранилище. Для этого предназначены два метода: ПоместитьФайл() и ПоместитьФайлВоВременноеХранилище().
Первый метод, ПоместитьФайл(), помещает файл из локальной файловой системы во временное хранилище. Метод может принимать целевой адрес в хранилище. Если же он не определен или является пустой строкой, то будет создан новый файл и метод вернет его адрес через соответствующий параметр.
Если параметр, определяющий интерактивный режим работы, равен Истина, то метод отобразит стандартное диалоговое окно выбора файла, в котором можно выбрать файл для помещения в хранилище. В этом случае метод также вернет адрес выбранного файла.
Как результат метод возвращает Ложь, если пользователь в интерактивном режиме отказался от совершения операции в диалоге выбора файла. Метод доступен только на клиенте.
Второй метод, ПоместитьФайлВоВременноеХранилище(), схож с предыдущим, за исключением того, что он доступен на сервере, а данные для записи во временное хранилище представляются не в виде пути в файловой системе, а в виде переменной типа ДвоичныеДанные. Точно так же, если не указан целевой адрес, создается новый файл в хранилище. Его адрес возвращается как результат функции.
Получение файла из временного хранилища
При записи объекта в информационную базу может понадобиться извлечь данные из временного хранилища и поместить их, например, в реквизит. Для этого есть соответствующий серверный метод — ПолучитьФайлИзВременногоХранилища(). Этот метод извлекает данные из временного хранилища и возвращает их как результат. Для этого необходимо указать адрес во временном хранилище. Этот адрес возвращают вышеописанные методы ПоместитьФайл() и ПоместитьФайлВоВременноеХранилище() в случае их успешного выполнения.
Удаление файла из временного хранилища
После того, как данные сохранены в реквизите, файл во временном хранилище можно удалить. Для этого есть метод УдалитьФайлИзВременногоХранилища(), который удаляет файл из временного хранилища. Метод принимает в параметре адрес файла во временном хранилище. Доступен на сервере.
Проверка адреса на принадлежность временному хранилищу
Адрес файла может указывать как на временное хранилище, так и на реквизит в информационной базе. Для проверки его типа существует метод ЭтоАдресВременногоХранилища().
Он проверяет, что переданный адрес является адресом, указывающим на хранилище. Возвращает Истина, если адрес указывает на временное хранилище. Метод доступен на сервере.
Получение адреса реквизита
После того, как данные помещены в реквизит в информационной базе, может потребоваться получить доступ к ним с помощью файловых методов.
Но прежде чем получить данные, например из реквизита, необходимо получить адрес этого реквизита. Для этого существует метод ПолучитьАдресФайлаВИнформационнойБазе().
Его назначение – вернуть адрес файла в информационной базе по исходным параметрам. Для этого необходимо передать ключ объекта (это может быть как ссылка на объект, так и ключ записи регистра сведений) и имя реквизита. Если нужно получить адрес файла, хранимого в реквизите табличной части, до имени реквизита в параметре, задающем имя реквизита, необходимо добавить имя табличной части и точку «.». Метод доступен как на клиенте, так и на сервере.
Получение файла из информационной базы
Метод ПолучитьФайл() получает файл из информационной базы и сохраняет его в локальную файловую систему пользователя. Первый параметр определяет адрес файла в реквизите или во временном хранилище файлов. Второй параметр определяет целевое расположение полученного файла. В не интерактивном режиме необходимо указать путь. В интерактивном режиме параметр является опциональным.
По умолчанию метод исполняется в интерактивном режиме, то есть последний параметр равен Истина. Это значит, что выдается диалоговое окно, в котором можно указать действие с полученным файлом: запустить его или сохранить по указанному пользователем расположению. Если активен интерактивный режим, а параметр Целевой путь к файлу на диске не указан, то операция открытия файла не доступна. Возвращает булевское значение. Ложь означает, что пользователь выбрал отмену операции в диалоговом окне сохранения файлов в интерактивном режиме.
Пример использования файловых методов
// Получение в интерактивном режиме файла с диска // и помещение его во временное хранилище &НаКлиенте Процедура ВыбратьФайлСДискаИЗаписать()
// Копирование файла из временного хранилища в реквизит // справочника, запись объекта,удаление файла из временного // хранилища &НаСервере Процедура ПоместитьФайлОбъекта(АдресВременногоХранилища)
// Считывание файла из реквизита и сохранение его // на локальном диске в интерактивном режиме &НаКлиенте Процедура ПрочитатьФайлИСохранитьНаДиск()
Поддержка адресов в поле картинки
Элемент управления Поле картинки поддерживает отображение картинки, заданной адресом файла во временном хранилище или в базе данных.
Для этого в свойстве Данные элемента формы необходимо задать реквизит строкового типа. Значение этого реквизита и будет интерпретироваться как адрес картинки.
Пример // Привязка поля картинки к адресу картинки во временном // хранилище. АдресКартинки реквизит формы строкового типа
Ограничения при работе с Веб-клиентом
Работа описываемого механизма при использовании Веб-клиента имеет некоторые ограничения. Эти ограничения связаны с особенностями модели безопасности браузера. Так, например, клиент самостоятельно не может сохранить файл в локальную файловую систему, то есть доступен только интерактивный вариант клиентских методов ПоместитьФайл() и ПолучитьФайл(). При попытке использовать не интерактивный режим генерируется исключение. Диалоговые окна, отображаемые в интерактивном режиме, специфичны для конкретного типа браузера.
Особенности при работе с ХранилищемЗначений на Клиенте
Когда у Документа в табличной части есть реквизит типа ХранилищеЗначений, то тормозит открытие формы документа, если в этом реквизите записаны данные большого размера.
Возможно, при открытии формы, на клиент передается не ссылка на данные находящиеся в ХранилищеЗначений, а сами данные.
- В свойствах табличного реквизита формы есть флаг "Использовать всегда". Если он установлен, то содержимое поля всегда передается между сервером и клиентом — например, при открытии формы. Этот флаг надо отключить, но при этом нужно учесть это в коде, так как по умолчанию значения этого поля на клиенте не будет. Пример можно посмотреть в 1С:Архив.
Ещё лучше использовать временное хранилище для передачи файлов между клиентом и сервером.
В статье рассказывается что такое Кэш 1С и как его можно самостоятельно очистить несколькими способами. В конце публикации расположена подробная видеоинструкция.
Порой программа 1С начинает вести себя немного странно, например, при сетевом варианте работы у одного пользователя какой-то отчет выдает одни данные, а у другого этот же отчет выдает другие. Либо при запуске программы программа выдает сообщение «Неверный формат хранилища данных», «Ошибка при выполнении файловой операции» или в процессе работы с программой выходит сообщение «ошибка формата потока», после которых необходимо либо завершить работу с программой либо перезапустить ее. Виной этому являются ошибки в Кэше 1С.
Что же такое Кэш вообщем и Кэш 1С в частности. В переводе с английского cashe означает тайник либо хранилище. Впервые данный термин в компьютерном слэнге был использован в 1967 году во время подготовки стать для журнала «IBM Systems Jornal» (ссылка на статью в векипедии) . Векипедия дает данному термину следующее определение Кэш – промежуточный буфер с быстрым доступом, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Процесс кэширования используется как при работе, самого компьютера, так и при работе отдельных программ, 1С не является исключением. Кэшом 1С называется область на компьютере, куда платформа в процессе работы записывает наиболее часто используемую информацию для более быстрого доступа к ней, это может быть служебная информация пользователей, список отборов, шрифтов, расположение окон. При возникновении каких-либо сбоев Кэш начинает обрабатываться неправильно, и программа начинает работать некорректно. Это может произойти в случае аварийного завершение работы программы, например при отключении питания компьютера, динамического обновления программы, обновления без завершения работы пользователей и др.
В случае возникновения таких сбоев необходимо произвести чистку Кэша 1с, данную процедуру рекомендуется делать не только при возникновении сбоев, но и в рамках регламентного обслуживания программы, ведь часто в КЭШе хранятся данные, которые программа уже не использует и они только занимают место на компьютере, замедляя при этом работу 1с.
Существует несколько способов чистки Кэша 1С, давайте разберем подробно каждый из них
Первый и самый простой это удалить из списка базу, запомнив и сохранив ее путь и добавить ее туда снова. Сохранить путь проще всего следующим образом: выделить базу в списке, нажать на кнопку «изменить», откроется окно редактирование информационной базы, в котором нам нужно выделить строчку, которая находится в поле «каталог информационной базы». Кликнуть по ней правой кнопкой мыши и нажать копировать, записывать тем самым путь к базе в буфер обмена вашей операционной системы, его можно либо оставить там, до момента добавления базы, либо сохранить в любой текстовый редактор, например в Microsoft Word. И нажать на кнопку отмена, закрыв тем самым окно редактирование информационной базы
После этого в окне конфигурации жмем на кнопку «Удалить» и утвердительно отвечаем на вопрос программы
Базу из списке мы удалили, теперь необходимо ее добавить, для этого в окне платформы жмем на кнопку «Добавить», устанавливаем переключатель в «Добавление в список существующей информационной базы» и жмем «Далее»
В открывшемся окне в поле «Укажите название информационной базы» руками пишем название нашей базы, в поле «Каталог информационной базы» копируем пусть нашей базы, который мы сохранили на предыдущем шаге и жмем «Далее»
На следующем шаге оставляем все по умолчанию и жмем «Готово»
База в список у нас добавлена, Кэш для нее очищен
Данный способ хоть и является самым простым, но имеет ряд недостатков, во-первых при нем файлы Кэша не удаляются с компьютера, а лишь отвязываются от базы при ее удалении, оставаясь в компьютере и засоряя тем самым его память, во-вторых если в Вашем списке не одна база а несколько, такую процедуру придется проделывать для каждой базы. Этим способом рекомендуется пользоваться в тех случаях, когда необходимо быстро восстановить работу базы и нет времени разбираться или ждать программиста. Например, программа дала сбой, а Ваш программист в данный момент занят и не может Вам помочь и чтобы не останавливать работу, Вы чистите Кэш этим способом, но в дальнейшем будет необходимо провести его чистку другим способов с удалением файлов Кэша, о котором я рассажу далее.
Второй способ это вручную удалить файлы Кэша с компьютера. Чтобы это сделать, для начала нужно определить их местонахождение. Кэш 1C в Windows хранится в следующих папка профиля пользователя это Roaming и Loсal. Данные папки расположены в пути: C:UsersИмяПользователяAppData. Причем папка AppData по умолчанию скрыта. Попасть в нее можно двумя способами: это либо включить отображение скрытых папок, перейдя в Панель управления→Параметры папок→Вкладка «Вид»→Показывать скрытые файлы, папки и диски
Либо в проводнике вручную, после имени пользователя написать строчку AppData и нажать на клавиатуре Enter
Либо если мы вдруг не знаем имя пользователя в проводнике можно написать следующую строчку: %userprofile%AppData, нажать Enter и мы также попадем в эту папку
Попав в папку AppDate, поочередно заходим в папки Local и Roaming и переходим в каждой из них в папку 1С, а в ней в 1Cv8 и если есть 1Сv82 то в нее тоже
В этих папках (1cV8, 1Cv82) мы видим множество папок с непонятным называнием, это и есть Кэш 1С. Все эти папки необходимо выделить и удалить, обязательно закрыв перед этим 1С, удалять можно смело, никакие данные из Вашей базы при этом не пострадают, а все необходимые папки платформа вновь создаст при очередном запуске
Данный способ является самым эффективным, но немного трудоемким. Его можно упросить, создав специальный файл, который будет проделывать все эти процедуры автоматически, вам лишь необходимо будет запустить его под именем администратора. Это файл будет иметь расширение.bat, в народе такие файлы называется «батник». Создать его можно следующим образом, открываем блокнот Windows и пишем в нем следующие команды:
Далее выбираем Файл→Сохранить как→выбираем место куда сохраняем, пишем название файла (например «cashe») и в названии меняем расширение с .txt на .bat, должно получиться как на картинке ниже, и жмем сохранить
Если вдруг не получается создать такой файл или Вам лень это делать, но можете скачать его готовый по следующей ссылке . Данный способ чистки Кэша 1С является самым простым, не требует никаких специальных знаний и навыков и выполняется за считанные секунды. Вам лишь необходимо запустить данный файл
И в заключении расскажу еще об одном способе очистки Кеша 1С — это установить дополнительный параметр запуска информационной базы. У данного способа есть свои плюсы и минусы, к плюсам я бы отнес, то, что Кэш очищается при каждом запуске 1С, к минусам – снижение общей производительности 1С. Еще отмечу, что данный способ подходит только для режима запуска Тонкий клиент. Данным способ рекомендуется использовать, тогда, когда ошибки базы связанные с Кэшем появляются систематически. Чтобы выставить данный параметр запуска, необходимо в окне платформы выбрать нужную информационную базу, нажать на кнопку «Изменить», в открывшемся окне ничего не меняя нажать «Далее»
Откроется окно редактирования информационной базы, где в дополнительных параметрах запусках необходимо написать строчку /ClearCache и кликнуть «Готово»
Обращу внимание, что после очистки Кэша Ваша база будет запускаться немного дольше обычного, т.к. программа будет создавать необходимые ей для работы временные файлы, но это только в первый раз после чистки, следующие разы запуск будет проходить быстрее. Также список пользователей базы (при их наличии) после очистки Кэша будет пуст, нужно будет выбрать нужного пользователя повторно
Если остались вопросы, можете задать их в комментариях, если же не хотите тратить свое время и доверить чистку Кэша 1С профессионалам, можете написать нам через форму обратной связи или позвонить по телефону который указан на сайте. будет рады Вам помочь.