1с отправить печатную форму по почте временное хранилище

Отправка почты с прикрепленным файлом из временного хранилища

Необходимо сохранить печатную форму документа в файл и отправить ее по почте.
Как отправить почту и как прикрепить файл разобралась.
Проблема в следующем:
Если сохраняю файл куда-нибудь в конкретную папку, все работает:

Путь=»C:\Temp\ЗаявкиДляОтправки»;
СоздатьКаталог(Путь);
ПутьФайла=Путь+»\»+Номер+».xls»;
ТабДокумент.Записать(ПутьФайла,ТипФайлаТабличногоДокумента.XLS);
.
Письмо.Вложения.Добавить(ПутьФайла,»Заявка»);

Если же помещаю во Временное хранилище:

Выдает ошибку:
Каталог не обнаружен ‘e1cib\tempstorage\aed171cc-f7d4-4d6d-9a92-d5954c0c62ca’

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

Тип: Строка.
Указывает желаемое расширение имени временного файла. Если параметр не задан, то создается временный файл с расширением по умолчанию (.tmp). Желаемое расширение задается строкой, которая и будет использована в качестве расширения. Указание точки в начале расширения не обязательно. Например, при указании «.xml» или «xml» результат будет одинаковый.
Возвращаемое значение:

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

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Примечание:

Рекомендуется удалять временный файл самостоятельно после его использования.
Пример:

Все получилось. Спасибо большое за помощь.
ТабДокумент.Записать(ИмяВременногоФайла,ТипФайлаТабличногоДокумента.XLS);
.

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

Источник

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

reklama http

Временное хранилище позволяет временно хранить какие-то данные в служебных файлах 1С. Эти данные не будут записаны в базу данных, но они и не будут доступны после завершения сеанса. Обычно временное хранилище используют для передачи файла с клиента на сервер, для передачи больших массивов данных и т.п.

С временным хранилищем можно работать как на сервере, так и на клиенте. Но обращение к хранилищу на клиенте выполняет неявное обращение к серверу.

Как поместить данные во временное хранилище

Для этого используется метод глобального контекста ПоместитьВоВременноеХранилище(). Первым параметром нужно передать данные, которые нужно поместить во временное хранилище. Данный метод вернет адрес во временном хранилище, где будут храниться данные. Например:

Как получить данные из временного хранилища

Для этого используется метод глобального контекста ПолучитьИзВременногоХранилища(). Первым параметром нужно передать адрес во временном хранилище, по которому находятся некие данные (они должны быть предварительно помещены туда методом ПоместитьВоВременноеХранилище). Если по указанному адресу ничего нет, метод вернет Неопределено. Например:

Пример работы с временным хранилищем

Как удалить данные из временного хранилища

Чтобы явно удалить данные из временного хранилища нужно использовать метод УдалитьИзВременногоХранилища(), передав параметром адрес временного хранилища, например:

Как изменить данные во временном хранилище

Если во временном хранилище уже есть какие-то данные и нам нужно получить их, изменить и снова положить туда, то в методе ПоместитьВоВременноеХранилище() можно использовать второй параметр. Туда нужно передать адрес временного хранилища, куда нужно положить данные. Если там уже что-то было, то старые данные будут заменены на новые. Например:

Время жизни данных в хранилище

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

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

Если не заполнять второй параметр, то данные будут удалены из хранилища сразу после завершения серверного вызова. Например:

Если указать уникальный идентификатор формы, то данные будут храниться пока открыта форма с таким идентификатором:

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

Для этого можно использовать метод ЭтоАдресВременногоХранилища(), передавая ему параметром переменную с потенциальным адресом во временном хранилище. Если переменная является адресом временного хранилища, то метод вернет Истина, иначе Ложь. Например:

Так как адрес временного хранилища является обычной строкой, то можно использовать такой способ:

Получение данных из фонового задания

Через временное хранилище можно получать данные из фонового задания или передавать какие-то данные в фоновое задание. Для этого нужно воспользоваться следующим алгоритмом:

Источник

Вопрос по ПоместитьВоВременноеХранилище, модуль объекта и теорию

Есть обработка.
В модуле объекта обработки заполняется табличная часть обработки у которой есть колонка «АдресВремХранилища» (Строка).

В цикле перебираются строки табличной части, по каждой строке создается ТабличныйДокумент с картинками. Табличный документ помещается во временное хранилище и адрес хранилища записывается в колонку строки табличной части.

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

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

Это можно реализовать с помощью ПоместитьВоВременноеХранилище или по окончанию работы процедуры модуля объекта, временное хранилище уничтожится?

Тип: Произвольный.
Тип: УникальныйИдентификатор; Строка.
Адрес во временном хранилище, по которому надо поместить данные. Или уникальный идентификатор формы, во временное хранилище которой, надо поместить данные и вернуть новый адрес.
В случае, если передается УникальныйИдентификатор формы, то значение будет автоматически удалено после закрытия этой формы.
Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы.

Что надо сделать, чтобы потом хранилище жило пока не закроется форма?

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Доступ к файловой системе из кода конфигурации

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

1.1. Если доступ к файловой системе осуществляется из кода, выполняемого на клиенте, то он выполняется под правами пользователя, от имени которого запущено приложение (тонкий, толстый или веб-клиент). Как правило, это текущий пользователь операционной системы.

1.2. Если доступ к файловой системе осуществляется из кода, выполняемого на сервере, то:

* Рабочие процессы могут быть также запущены от имени другого пользователя, отличного от того, под которым запускается агент сервера. Подробнее см. руководство администратора клиент-серверного варианта, описание служебного файла swpuser.ini

Область применения (уточнение): управляемое приложение, обычное приложение.

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

3.1. В именах файлов, автоматически формируемых из кода конфигурации, указывать только английские буквы, а также цифры, а в качестве кодировки текстовых файлов использовать только UTF-8 (именно этот формат предпочтителен, т.к. только с ним корректно работает операционная система macOS).

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

3.2. В тех случаях, когда имя файла не генерируется системой, а его явно вводит пользователь, разрешить ввод русскоязычных имен, но при этом дать возможность транслитерировать его в англоязычное имя. По умолчанию, если это технически возможно и не снижает удобство работы, рекомендуется предлагать англоязычное имя файла, а для текстовых файлов – сохранение в кодировке UTF-8.

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

Работа с временными файлами и каталогами

При необходимости использования временных файлов и каталогов необходимо соблюдать следующие требования:

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

ИмяПромежуточногоФайла = «C:\Временные файлы 1С\TempFile.xml»;
Данные.Записать(ИмяПромежуточногоФайла);

У текущего пользователя может не быть прав на запись в указанный каталог. Кроме того, при одновременном выполнении этого кода из двух разных сеансов возникнет ошибка.

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

Кроме того, при использовании метода ПолучитьИмяВременногоФайла платформа 1С:Предприятие сохраняет контроль над такими файлами и автоматически удаляет их

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

Таким образом, неправильно :

Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + «.xml»;
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

Если по каким-то причинам прикладной код не удалит созданный файл (например, между блоками создания и удаления временного файла возникнет штатное или нештатное исключение), этот файл так и останется в каталоге временных файлов.

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

2. Для создания временного каталога рекомендуется также использовать имя, полученное при помощи метода ПолучитьИмяВременногоФайла (исключение составляет веб-клиент, см. ниже п. 3). Это гарантирует уникальность имени создаваемого каталога при работе в многопользовательском режиме и гарантирует, что после перезапуска рабочего процесса или клиентского приложения временный каталог будет автоматически удален платформой 1С:Предприятие. После этого, внутри созданного каталога можно создавать другие каталоги и файлы без ограничений.

Каталог = КаталогВременныхФайлов();
ИмяФайла = «TempDataFile.xml»;
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

Каталог = КаталогВременныхФайлов();
ИмяФайла = Строка(Новый УникальныйИдентификатор) + «.xml»;
ИмяПромежуточногоФайла = Каталог + ИмяФайла;
Данные.Записать(ИмяПромежуточногоФайла);

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

5.1. В редких случаях может возникнуть необходимость передачи данных во временных файлах между сеансами, например, при подготовке данных для фонового задания, при организации длительного процесса, обслуживающего несколько последовательных вызовов web-сервиса. Необходимо самостоятельно обеспечивать гарантировано общее место хранения, права для доступа к файлам из разных мест их обработки, удаление файлов по истечению сроков их обработки или аварийного завершения процесса обработки. Рекомендуется использовать следующий подход:

Передача файлов между клиентом и сервером

Чтение = Новый ЧтениеТекста(ИмяФайла);
.

Результат = Чтение.Прочитать();
Возврат Результат;

ИмяФайлаДляОбработки = «C:\Файлы для обработки\Загрузка.xml»;
ОписаниеОповещения = Новый ОписаниеОповещения(
«ОбработатьФайлЗавершение», ЭтотОбъект);

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

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

Данные = ПолучитьИзВременногоХранилища(Адрес);
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла(«txt»);
Данные.Записать(ИмяПромежуточногоФайла);

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

.
// Первый серверный вызов
ИмяФайлаДляОбработки = «C:\Файлы для обработки\Загрузка.xml»;
ОписаниеОповещения = Новый ОписаниеОповещения(
«ОбработатьФайлЗавершение», ЭтотОбъект);

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

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.

.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.

// Третий серверный вызов с новой версией файла
ОписаниеОповещения = Новый ОписаниеОповещения(
«ПродолжитьОбработкуФайлаЗавершение», ЭтотОбъект);

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

Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

.
// Первый серверный вызов
ИмяФайлаДляОбработки = «C:\Файлы для обработки\Загрузка.xml»;

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

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

&НаКлиенте
Процедура ОбработатьФайлЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

.
Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
ПродолжитьОбработкуФайла();
.

.
// Второй серверный вызов с той же версией файла
Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес);
.

// Третий серверный вызов с новой версией файла
УдалитьИзВременногоХранилища(Адрес);

ОписаниеОповещения = Новый ОписаниеОповещения(
«ПродолжитьОбработкуФайлаЗавершение», ЭтотОбъект);

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

&НаКлиенте
Процедура ПродолжитьОбработкуФайлаЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)

ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
ПараметрыЗагрузки.Интерактивно = Ложь;

ФайловаяСистемаКлиент.ЗагрузитьФайл(ОписаниеОповещения,
ПараметрыЗагрузки, ИмяФайлаДляОбработки);

&НаКлиенте
Процедура ОбработатьФайлЗавершение(ПомещенныйФайл, ДополнительныеПараметры)

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с отобразить картинку на управляемой форме
  • 1с отображение pdf на форме