Описание ошибки бсп 1с

О чем эта статья

Статья продолжает цикл статей «Первые шаги в разработке на 1С».

В ней мы рассмотрим способы информирования пользователя, которые присутствуют в платформе «1С:Предприятие» 8, а также акцентируем ваше внимание на некоторых особенностях работы этих механизмов, эти особенности связаны с режимом использования модальности.

Применимость

В статье рассматривается функциональность:

  • Интерфейса в варианте «Версии 8.2» для конфигурации, разработанной на платформе «1С:Предприятие» 8.2.19.130
  • Интерфейса «Такси» для конфигурации, разработанной на платформе «1С:Предприятие» 8.3.4.496 до 8.3.9+
  • Интерфейса «Такси» для конфигурации, разработанной на платформе «1С:Предприятие» 8.3.10-8.3.11

Как в 1С вывести сообщение пользователю

  1. Ознакомительные сообщения
  2. Механизм оповещений
  3. Терминирующие сообщения
  4. Особенности использования модальных окон в Платформе 8.3
  5. Класс СообщениеПользователю
  6. Уведомление о состоянии процесса

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

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

Типы сообщений:

  • терминирующие, которые останавливают выполнение программы и не дают продолжить ее, пока пользователь не ознакомится с этим сообщением и не выполнит определенные действия. Например, на экран пользователю будет выдан вопрос, на который нужно будет ответить Да или Нет. Пока пользователь не ответит – программа не выполняет дальнейшие действия;
  • ознакомительные сообщения, которые просто выводятся для пользователя и позволяют работать дальше (т.е. используются в режиме оповещения).

Терминирующими сообщениями должны быть сообщения об ошибках, а ознакомительными: рекомендации, сообщения о текущем этапе процесса и показ расчетных значений (отладочная печать).

Ознакомительные сообщения

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

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

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

Тестовые и отладочные сообщения выдавать пользователю не стоит, т.к. рано или поздно он начнет игнорировать абсолютно все сообщения.

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

Открепить от формы окно с сообщением нельзя.

Синтаксис функции:

Сообщить (<Текст сообщения>, <Статус>)

Т.е. первым параметром является сам текст.

Второй параметр (статус сообщения) является необязательным. Для статуса можно указывать значения: Обычное, Важное, ОченьВажное и т.д.

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

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

Ознакомительные сообщения

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

Пользователь нажимает на кнопку Записать и закрыть, в этом случае сообщение выводится в соответствующее окно (справа формы).

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

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

Неправильное использование функции Сообщить

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

В этом случае системе можно сообщить, что форму закрывать не нужно, и показать пользователю, какие ошибки возникают при проведении документа.

Функция Сообщить полностью поддерживается в Платформе 8.3. Ее можно использовать, и она будет работать (и в файловом варианте, и в клиент-серверном).

Но также следует отметить, что у функции Сообщить есть дальнейшее развитие – это класс сообщения пользователю, который позволяет помимо того, что выводить сообщение, привязывать его контекстно к каким-либо элементам формы.

Например, сообщение об ошибке можно привязать к элементу формы, что для пользователя очень наглядно. Несколько позже к рассмотрению этого вопроса мы вернемся. У функции Сообщить есть интересная особенность.

Так, программный код в Платформе 8.3 может быть исполнен как на стороне Клиента, так и на стороне Сервера.

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

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

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

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

В этот момент система запросит данные из буфера и выведет их на экран.

Эта же особенность касается и класса СообщениеПользователю. На рисунке приведен пример использования метода Сообщить на стороне Сервера.

НаСервере Сообщить

В результате использования метода Сообщить на стороне Сервера вывелись сообщения на экран на стороне Клиента.

Сообщения на Клиенте

Механизм оповещений

Механизм оповещений нужен, чтобы информировать пользователя о том, что в системе “что-то” произошло и это “что-то” требует внимания пользователя. Оповещения создаются двумя сценариями:

  1. Самой платформой при интерактивной записи или изменении объекта
  2. Разработчиком при вызове в коде метода ПоказатьОповещениеПользователя().

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

Механизм оповещений

Кроме того, к оповещениям можно обратиться в соответствующей области информационной панели (кнопка “История” слева внизу формы приложения в варианте интерфейса «Версии 8.2»).

Чтобы создавать свои собственные оповещения, необходимо использовать метод глобального контекста ПоказатьОповещениеПользователя(). Его синтаксис до редакции 8.3.10 представлен ниже:

ПоказатьОповещениеПользователя (<Текст>, <НавигационнаяССылка>, <Пояснение>, <Картинка>)

В первом параметре передается текст, который будет выводиться в оповещении.

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

С помощью третьего параметра можно передать пояснение для сообщения, т.е. какое-то расширенное описание.

Также можно присвоить картинку, отображающую статус оповещения.

Следует отметить, что все эти параметры являются необязательными для заполнения. Ниже приведен пример использования данного метода (в конфигураторе и в пользовательском режиме в варианте интерфейса «Версии 8.2»).

Механизм оповещений
Механизм оповещений

В редакции платформы 8.3.10.216 для интерфейса в варианте «Такси» механизм оповещений был существенным образом доработан с целью повышения удобства работы как в тонком, так и в веб-клиенте. По этой причине изменились и передаваемые параметры в метод ПоказатьОповещениеПользователя(). Теперь синтаксис выглядят так:

ПоказатьОповещениеПользователя(<Текст>, <ДействиеПриНажатии>, <Пояснение>, <Картинка>, <СтатусОповещенияПользователя>, <КлючУникальности>)

Видно, что второй параметр, ранее называемый НавигационнаяСсылка, получил новое имя ДействиеПриНажатии. Это связано с тем, что теперь в него стало возможным передавать не только строку с навигационной ссылкой, но и описание оповещения. Это проиллюстрировано скриншотом ниже:

Механизм оповещений

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

Следующий параметр СтатусОповещенияПользователя появился впервые. В нем указывается статус оповещения (Информация или Важное).

В случае варианта Важное, если пользователь не отреагировал на сообщение, то после того, как оно будет скрыто с экрана, его можно будет прочитать через Центр оповещений (о нем ниже). В случае же варианта Информация, оповещение удаляется без запоминания в этом центре. Давайте перепишем код из нашего примера, как показано ниже:

Механизм оповещений

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

Механизм оповещений

В панели инструментов появилась кнопка с пиктограммой звонка, по которой вызывается упомянутый выше Центр оповещений. В нем накапливаются новые важные оповещения, на которые пользователь пока никак не отреагировал.

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

Механизм оповещений

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

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

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

Как вы уже, наверное, успели заметить, изменился их внешний вид. Теперь оповещения выглядят более современно и эргономично, но их нельзя перемещать по экрану и изменять их размер. Обратите внимание, в нашем примере, текст оповещения попросту не поместился целиком в самом окне, и прочитать его полностью пользователь сможет, только открыв Центр Оповещений. Поэтому не стоит в текст оповещения писать большое количество текста.

Также к новым возможностям относится и одновременное отображение на экране до трех оповещений.

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

Давайте представим такую простую ситуацию: пользователь установил фильтр в каком-то списке для удобства. Допустим, он сделал это в форме списка справочника Номенклатуры. Потом, через какое-то время, решил ввести новый элемент с наименованием “Стул”, который не соответствует установленному ранее фильтру. Вводит его, записывает и…? И не видит его в списке. Что будет делать среднестатистический пользователь? Конечно, введет его второй раз, но опять не увидит. Дальше может последовать третий, четвертый, пятый раз. Когда ему надоест вводить одно и тоже, он, наконец, спросит у вас: а куда все пропадает?

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

Механизм оповещений

Терминирующие сообщения

Терминирующие сообщения – это те сообщения, которые не позволят работать, пока пользователь не произведет определенные действия, т.е. пока он не обработает сообщение.

О возможности использования терминирующих сообщений в Платформе 8.3 мы поговорим немного позже (в последнее время их стараются не использовать, поэтому рассмотренный пример больше касается Платформы 8.2).

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

В вопросе могут определяться разные наборы вариантов ответов (ДаНет, ДаНетОтмена, ОК, ОКОтмена, ПовторитьОтмена, ПрерватьПовторитьПропустить), которые задаются с помощью параметра.

Выведем какое-нибудь предупреждение с помощью строки (например, в модуле управляемого приложения):

Предупреждение(“Сейчас будет открыта база”);

Чтобы открыть модуль управляемого приложения, следует в дереве конфигурации выбрать объект Конфигурация, вызвать контекстное меню и выбрать пункт Открыть модуль управляемого приложения.

Открытие модуля управляемого приложения

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

Модальное окно

Аналогичным образом работает и функция Вопрос.

Синтаксис:
Вопрос(<ТекстВопроса>,<Кнопки>,<Таймаут>,<КнопкаПоУмолчанию>,<Заголовок>,
<КнопкаТаймаута>);

Обязательными являются только первые два параметра. Для второго параметра тип данных составной (РежимДиалогаВопрос или СписокЗначений). Третий параметр (<Таймаут>) характеризует интервал времени в секундах, в течение которого система будет ожидать ответа пользователя.

По истечении интервала окно вопроса будет закрыто. Аналогичный параметр(<Таймаут>) есть и у функции Предупреждение.

В качестве примера использования функции Вопрос можно использовать следующий код, записанный в модуле управляемого приложения:

Модуль управляемого приложения

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

Обращаю Ваше внимание, что данные методы (Предупреждение и Вопрос) не доступны на Сервере. И это логично, потому что интерфейсные методы не могут быть выполнены на Сервере, где нет пользователя.

Особенности использования модальных окон в Платформе 8.3

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

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

Режим использования модальности

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

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

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

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

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

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

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

Синтаксис функции ПоказатьПредупреждение:

ПоказатьПредупреждение(<ОписаниеОповещенияОЗавершении>, <ТекстПредупреждения>, <Таймаут>, <Заголовок>)

Параметр <ОписаниеОповещенияОЗавершении> (необязательный)

Тип данных: ОписаниеОповещения.

Содержит описание процедуры, которая будет вызвана после закрытия окна предупреждения.

Синтаксис функции ПоказатьВопрос:

ПоказатьВопрос(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)

Обязательными являются первые три параметра.

Ниже приведен пример использования функции.

Процедура ОписаниеОповещения

Пример функции оповещения в 1С

Класс СообщениеПользователю

Основное удобство класса сообщений СообщениеПользователю заключается в том, что это контекстное сообщение (в отличии от методов Предупреждение и Вопрос).

Сообщения могут быть привязаны к конкретному экранному элементу. Этот объект доступен и на Сервере.

Следует обратить внимание, что, во-первых, данный объект нужно создавать. Например: Сообщение = Новый СообщениеПользователю;

Таким образом мы создаем экземпляр данного объекта.

Во-вторых, нужно прописывать текст сообщения в отдельном свойстве.

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

Внимание! Для привязки к нужному полю формы обратите внимание на инициализацию свойств ПутьКДанным и КлючДанных. Применительно для документа при размещении кода в модуле объекта можно писать:

Сообщение.ПутьКДанным = “Объект”;
Сообщение.КлючДанных = ЭтотОбъект.Ссылка;

Чтобы открыть модуль документа, следует в окне редактирования объекта (документа) на закладке Прочее нажать на кнопку Модуль объекта.

Для эксперимента в модуле объекта какого-либо документа разместим код.

Сообщение пользователю

Ниже представлен полученный в пользовательском режиме результат для Платформы 8.3.

Сообщение пользователю в пользовательском режиме 1С

Следует отметить, что сообщения, выводимые с помощью нового объекта системы СообщениеПользователю в общем случае не являются терминирующими. Т.е. система позволит пользователю продолжить дальнейшие действия не отреагировав на выводимые сообщения.

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

Соответственно, в момент обнаружения ошибок отменяется транзакция, т.е. запрещается запись элемента справочника, либо запрещается проведение документа.

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

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

Уведомление о состоянии процесса

Существует специальная функция, с помощью которой можно отображать примерный ход выполнения какого-либо процесса.

Синтаксис: Состояние(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)
Параметры: <ТекстСообщения> и <Пояснение> – не обязательные, тип – Строка.
Текст выводится на специальную панель состояния.
<Прогресс> параметр тоже необязательный, но наглядный.
Тип: Число. Значение индикатора прогресса (от 1 до 100).
<Картинка> тоже необязательный параметр.
При обработке какого-либо события могут использоваться периодические вызовы функции типа:

Вызов функции

При этом могут меняться надписи, а могут изменяться значения параметра Прогресс.

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

Состояние выполнения процесса

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

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

Хочется еще раз акцентировать ваше внимание на том факте, что если ваша конфигурация (версии 8.3.3+) предполагает работу с помощью веб-клиента, то:

  • на уровне конфигурации должна быть установлена настройка режима модальности «Не использовать»
  • в коде должны использоваться методы асинхронной модели взаимодействия с пользователем. Такие методы начинаются со слов Показать или Начать.

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

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

Статья по программированию - в PDF-формате

Полезные ссылки:

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.

Различные варианты и нюансы использования объекта СообщениеПользователю и другие способы информирования пользователя: без привязки к какой-либо форме и с выводом сообщения в отдельном окне.

Объект «СообщениеПользователю» пришел на замену команды «Сообщить», которая использовалась в обычном интерфейсе, и перешла в управляемый. Команда удобна своей простотой и тем, что она, в отличии от других вариантов оповещения пользователя, доступна как на клиенте так и на сервере. На данный момент команда является устаревшей и ее не рекомендуется применять для управляемого интерфейса.

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

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

Сообщение пользователю об ошибке

Рассмотрим различные варианты использования объекта «СообщениеПользователю».

Вариант 1. Вывод сообщения в текущую активную форму с привязкой к ее элементам

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сообщение";
Сообщение.Поле = "Объект.Наименование";
Сообщение.Сообщить();

Поле – путь к реквизиту, к которому необходимо привязать сообщение. Путь к реквизитам объекта формы необходимо указывать задав ключевое слово «Объект». Путь к остальным реквизитам формы указывается просто, в виде наименования реквизита:

Сообщение.Поле = "РеквизитФормы";

Можно прикрепить сообщение к строке табличной части объекта:

Сообщение.Поле = "Объект.Товары[1].Номенклатура";

Следует иметь в виду, что сообщение всегда выводится в текущую активную форму. Даже в том случае, если сообщение формируется в другой форме, но она еще не открыта.

Например, при обработке события формы «ПриОткрытии» можно выполнить проверку некоторого условия и выводить сообщение об ошибке не открывая форму. Сообщение будет выведено в форму из которой выполнялось открытие новой формы.

Вариант 2. Вывод сообщения в текущую активную форму с привязкой к элементам дополнительной формы

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Сообщение";
Сообщение.Поле = "Наименование";
Сообщение.КлючДанных = Объект.Склад;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();

Поле – наименование реквизита без указания ключевого слова «Объект».

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

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

В данном варианте использования, сообщение можно привязать только к реквизитам объекта формы.

Вариант 3. Вывод сообщения в форму, которая не является активной

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Объект.ОсновнойДоговор);
Форма = ОткрытьФорму("Справочник.Договоры.ФормаОбъекта",
ПараметрыФормы, ЭтаФорма);

Сообщение = Новый СообщениеПользователю;
Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор;
Сообщение.Текст = "Сообщение";
Сообщение.Поле = "Объект.Наименование";
Сообщение.Сообщить();

УникальныйИдентификатор – уникальный идентификатор формы, в которой будет выведено сообщение.

Сообщение может быть привязано как к реквизитам объекта, так и к остальным реквизитам формы.

Вариант 4. Совмещение второго и третьего вариантов. Вывод сообщения не в текущую форму, с привязкой к реквизиту в третьей форме

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Объект.Контрагент);
Форма = ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыФормы, ЭтаФорма);

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Текст сообщения";
Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор;
Сообщение.Поле = "Наименование";
Сообщение.КлючДанных = Объект.Договор;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();

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

Вариант 5. Вывод сообщения из модуля объекта

Для вывода сообщения из модуля объекта, можно использовать следующий синтаксис:

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Текст сообщения";
Сообщение.Поле = "Наименование";
Сообщение.КлючДанных = Ссылка;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();

Сообщение будет выведено и привязано к реквизитам корректно, причем параметры: «КлючДанных» и «ПутьКДанным» можно опустить, указав в параметре «Поле» полный путь к данным формы. 

Важно. Без указания параметров: «КлючДанных» и «ПутьКДанным» сообщение будет привязано к реквизитам формы только в том случае, если форма объекта открыта и является активной . Однако, код процедуры модуля объекта может быть выполнен и без открытия формы. В этом случае сообщение будет выведено в текущей активной форме. И, чтобы при нажатии на тексте сообщения, открывалась форма объекта с привязкой сообщения к реквизитам формы (например при проведении документа из формы списка), должны быть заполнены параметры: «КлючДанных» и «ПутьКДанным». Параметр «Поле» в этом случае, должен содержать наименование реквизита объекта.

Также, как и на клиенте, есть возможность привязать сообщение к реквизитам формы объекта, который не является текущим. Для этого необходимо присвоить параметру «КлючДанных» ссылку на объект:

Сообщение.КлючДанных = ОсновнойДоговор;

В этом случае, будет открыта новая форма, по указанному ключу (ссылке) и сообщение будет привязано к ее реквизитам.

Однако, в модуле объекта, более корректно использовать метод объекта «УстановитьДанные» с указанием объекта, к которому требуется привязать сообщение:

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Текст сообщения";
Сообщение.Поле = "Наименование";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();

По своей сути, данный метод устанавливает значения для параметров: «КлючДанных» и «ПутьКДанным». Ключу данных будет присвоена ссылка на объект, а вот установка параметра «ПутьКДанным» происходит несколько сложнее. Дело в том, что работа с объектом может производится из разных форм. Имя основного реквизита формы, в общем случае, может отличатся от стандартного «Объект». Метод «УстановитьДанные» определяет имя основного реквизита формы по установленному соответствию. Причем, при записи объекта это соответствие устанавливается автоматически. В тех случаях, когда автоматического сопоставления нет, его необходимо указать явно с помощью метода «УстановитьСоответствиеОбъектаИРеквизитаФормы». Например, необходимо выполнить какие-либо действия с объектом, привязанным к текущей форме, и вывести в процессе этих действий сообщение:

//Серверная процедура в модуле  формы
&НаСервере
Процедура ОбработкаОбъекта()
КонтрагентОбъект = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Контрагенты"));
УстановитьСоответствиеОбъектаИРеквизитаФормы (КонтрагентОбъект, "Объект");
КонтрагентОбъект.ВыполнитьРаботуСОбъектом();
КонецПроцедуры

//Процедура в модуле объекта
Процедура ВыполнитьРаботуСОбъектом() Экспорт
……

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Текст сообщения";
Сообщение.Поле = "Наименование";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецПроцедуры

Оповещение пользователя без привязки к конкретной форме

Следует иметь в виду, что сообщения, выведенные командой «Сообщить» или через объект «СообщениеПользователю» всегда привязаны к какой-либо форме. Если после вывода сообщения форма закрывается, пользователь не сможет его прочитать. В данном случае удобнее использовать другие методы глобального контекста: «ПоказатьОповещениеПользователю» или «Состояние». Вызов методов возможен только на клиенте.

Метод «ПоказатьОповещениеПользователю» выводит всплывающее оповещение в нижний часть экрана, которое не привязано к какой-либо открытой форме:

Вывод оповещения пользователю

Синтаксис метода в справке:

ПоказатьОповещениеПользователя(<Текст>,
<ДействиеПриНажатии>,
<Пояснение>,
<Картинка>,
<СтатусОповещенияПользователя>,
<КлючУникальности>)

Первый параметр «Текст» вводит в заблуждение, на самом деле – это заголовок окна оповещения.

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

Параметр «Пояснение» — это как раз текст оповещения.

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

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

Команда «Состояние» выводит информацию в специальную панель состояния. Ее следует использовать для информирования пользователя о ходе выполнения кого либо действия. Дополнительно есть возможность показать прогресс выполнения:

Состояние(«Выполнение операции, 50, «Операция выполняется»);

Вывод состояния с прогресом

Вывод сообщения пользователю в отдельном окне

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

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

СтрокаСообщения = Новый ФорматированнаяСтрока(НовыйДоговор.Наименование,,,,
ПолучитьНавигационнуюСсылку(НовыйДоговор.Ссылка));
ТекстСообщения = Новый ФорматированнаяСтрока("Создан новый договор: """, СтрокаСообщения,"""");
ОписаниеОповещения = новый ОписаниеОповещения("ПредупрежедениеЗавершение",ЭтаФорма);
ПоказатьПредупреждение(ОписаниеОповещения, ТекстСообщения,, "Заголовок сообщения");


&НаКлиенте
Процедура ПредупрежедениеЗавершение(Параметры) Экспорт
//Обработка закрытия предупреждения
КонецПроцедуры    

Вывод предупреждения      

Если информация оказалась для Вас полезной, ставьте звездочку J

Другие мои статьи про механизмы платформы 1С

  1. Создание отчетов с помощью СКД — основные понятия и элементы
  2. Функциональные опции 1С 8.3 – все возможные варианты использования
  3. Автоматические и управляемые блокировки. Разделение итогов

БСП — вывести сообщение об ошибке.

Я
   Мандалай

18.02.17 — 10:08

Добрый день.

Подскажите есть ли в БСП метод вывода информации об ошибке?

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

   Asmody

1 — 18.02.17 — 10:43

(0) Новый СообщениеПользователю чем не подходит?

   Мандалай

2 — 18.02.17 — 11:06

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

Что нибудь типа МодульОбработкиСообщений.СообщитьПользователю(«Ошибка при выполнении запроса!»);

   Сияющий в темноте

3 — 18.02.17 — 11:16

Да,совсем программисты обленились-может вообще весь код за вас писать?

   b_ru

4 — 18.02.17 — 11:46

(2) Ну сделай

Сообщить(«Ошибка при выполнении запроса!»);

  

D3O

5 — 18.02.17 — 12:30

(0)

ОбщегоНазначенияКлиентСервер.СообщитьПользователю

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

ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю

// 1. Для вывода сообщения у поля управляемой формы, связанного с реквизитом объекта:
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр(«ru = ‘Сообщение об ошибке.'»),,«ПолеВРеквизитеФормыОбъект», «Объект»);
// Альтернативный вариант использования в форме объекта:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), , «Объект.ПолеВРеквизитеФормыОбъект»);

// 2. Для вывода сообщения рядом с полем управляемой формы, связанным с реквизитом формы:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), ,«ИмяРеквизитаФормы»));

// 3. Для вывода сообщения связанного с объектом информационной базы:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), ОбъектИнформационнойБазы, «Ответственный»,,Отказ);

// 4. Для вывода сообщения по ссылке на объект информационной базы:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), Ссылка, , , Отказ);

// 5. Пример вызова на сервере:

ОбщегоНазначения.СообщитьПользователю(НСтр(«ru = ‘Объект с таким представлением уже существует.'»,, Поле,, Отказ));

Если Ваша конфигурация применяет БСП, то рекомендуется использовать процедуры БСП для вывода сообщений пользователям.

Примеры вывода сообщений

Если обращение «с сервера», то для вывода сообщения пользователю можно применять следующую процедуру БСП:

ОбщегоНазначения.СообщитьПользователю(«Текст сообщения»);

Если обращение «с клиента», то для вывода сообщения пользователю можно применять следующую процедуру БСП:

ОбщегоНазначенияКлиент.СообщитьПользователю(«Текст сообщения»);

Устаревшая процедура, но которая еще используется в конфигурациях на предыдущих версиях БСП:

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

Пример вывода сообщения об ошибке:

Попытка
    ФайлCSV.Прочитать(ПутьКФайлу);
Исключение
    ОбщегоНазначенияКлиент.СообщитьПользователю(«Не удалось загрузить файл: « + ПутьКФайлу + Символы.ПС + ОписаниеОшибки());
КонецПопытки;

Общий синтаксис процедуры:

// Формирует и выводит сообщение, которое
может быть связано с элементом управления формы.
//
// Параметры:
// 
ТекстСообщенияПользователю — Строка — текст сообщения.
// 
КлючДанных — ЛюбаяСсылка — объект или ключ записи информационной базы, к
которому это сообщение относится.
// 
Поле — Строка — наименование реквизита формы.
// 
ПутьКДанным — Строка — путь к данным (путь к реквизиту формы).
// 
Отказ — Булево — выходной параметр, всегда устанавливается в значение
Истина.

Процедура СообщитьПользователю(
    Знач ТекстСообщенияПользователю,
    Знач КлючДанных = Неопределено,
    Знач Поле = «»,
    Знач ПутьКДанным = «»,
    Отказ = Ложь) Экспорт

Примеры:

// 1. Для вывода сообщения у поля
управляемой формы, связанного с реквизитом объекта:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), , «ПолеВРеквизитеФормыОбъект», «Объект»);

// Альтернативный вариант использования в
форме объекта:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), , «Объект.ПолеВРеквизитеФормыОбъект»);

// 2. Для вывода сообщения рядом с полем
управляемой формы, связанным с реквизитом формы:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), , «ИмяРеквизитаФормы»);

// 3. Для вывода сообщения связанного с
объектом информационной базы:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), ОбъектИнформационнойБазы, «Ответственный»,,Отказ);

// 4. Для вывода сообщения по ссылке на
объект информационной базы:
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр(«ru = ‘Сообщение об ошибке.'»), Ссылка, , , Отказ);

Случаи некорректного использования:

1. Передача одновременно параметров КлючДанных и ПутьКДанным.

2. Передача в параметре КлючДанных значения типа отличного от допустимого.

3. Установка ссылки без установки поля (и/или пути к данным).

Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Время на прочтение
7 мин

Количество просмотров 2.1K

Введение

Всем доброго времени! В данном небольшом мануале рассмотрим базовый функционал подсистемы (БСП) модулей «Шаблоны сообщений«, которые используются в типовых конфигурациях. Функционал будет полезен пользователям для общего понимания встроенных возможностей программ, а так же программистам для быстрого и правильного внедрения и реализации своих разработок (подсистем) в типовые конфигурации

Данную статью вы можете использовать как шпаргалку на будущее.

Статью разобьем на две части — в первой из них программно создадим и настроем типовой шаблон сообщений, использую элемент справочника конфигурации «Шаблоны сообщений«.

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

Создание и настройка шаблона сообщений типовыми методами

В данном разделе, как указано выше, попробуем написать код, который создаст типовой шаблон сообщения в справочнике «Шаблоны сообщений«, конфигурации на БСП.

Я буду разрабатывать пример для не типового документа в системе стандартных подсистем — это документ «Списание товаров«. Для этого я первым этапом должен внести изменения в конфигурацию (или расширение) небольшие правки для этого документа:

В модуль менеджера документа «Списание товара» вносим пустые процедуры взаимодействия с подсистемой сообщений пользователю:

// СтандартныеПодсистемы.ШаблоныСообщений

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений.
//

Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//

Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт

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

// Заполняет список получателей почты при отправке сообщения сформированного по шаблону.
//

Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.ШаблоныСообщений

Далее, для документа «Списание товаров» я создаю СКД макет «ДанныеШаблонаСообщений«, где самым простым запросом выбираю поля, которые мне нужны. В общем виде, выглядит это вот так:

Описание СКД шаблона документа "Списание товаров".

Описание СКД шаблона документа «Списание товаров».

Запрос простой, но его нужно сделать именно так:

ВЫБРАТЬ
	_ДемоСписаниеТоваров.Ссылка КАК Ссылка,
	_ДемоСписаниеТоваров.ВерсияДанных КАК ВерсияДанных,
	_ДемоСписаниеТоваров.ПометкаУдаления КАК ПометкаУдаления,
	_ДемоСписаниеТоваров.Номер КАК Номер,
	_ДемоСписаниеТоваров.Дата КАК Дата,
	_ДемоСписаниеТоваров.Комментарий КАК Комментарий,
	_ДемоСписаниеТоваров.МестоХранения КАК МестоХранения,
	_ДемоСписаниеТоваров.Организация КАК Организация,
	_ДемоСписаниеТоваров.Ответственный КАК Ответственный
ИЗ
	Документ._ДемоСписаниеТоваров КАК _ДемоСписаниеТоваров
ГДЕ
	_ДемоСписаниеТоваров.Ссылка = &_ДемоСписаниеТоваров

Следующим этапом, я должен добавить ссылку документа «Списание товаров» в определяемый тип «Предмет шаблона сообщений«. Вот так:

Определение типа "Списание товаров"

Определение типа «Списание товаров»

Все, теперь я создаю элемент справочника «Шаблон сообщений» и вижу, что тип документа «Списание товаров» доступен:

 Доступность документа "Списание товаров" в назначениях шаблонов сообщений.

Доступность документа «Списание товаров» в назначениях шаблонов сообщений.

Далее, я напишу обработку, которая автоматически создаст мне шаблон по типу документа «Списание товаров«. Код обработки вот такой:

&НаКлиенте
Процедура СоздатьШаблон(Команда)

	СоздатьШаблонНаСервере();
	
КонецПроцедуры   

&НаСервере
Процедура СоздатьШаблонНаСервере()
	
	ПараметрыШаблона 	= ШаблоныСообщений.ОписаниеПараметровШаблона();
		
	//  Структура:
	//   Наименование - Строка - наименование шаблона.
	//   Текст        - Строка - текст шаблона.
	//   Тема         - Строка - текст темы электронного письма.
	//   ТипШаблона   - Строка - тип "Письмо" или "SMS".
	//   Назначение   - Строка - Например, Заказ поставщику.
	//   ПолноеИмяТипаНазначения - Строка - Документ.ЗаказПокупателя параметры доступны все его реквизиты.
	//   ФорматПисьма    - ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем HTML или ОбычныйТекст.
	//   УпаковатьВАрхив - Булево - если Истина, Только для шаблонов электронной почты.
	//   ТранслитерироватьИменаФайлов - Булево - "Schet na oplaty.pdf".
	//   ФорматыВложений - СписокЗначений - список форматов вложений. Только для шаблонов электронной почты.
	//   ВладелецШаблона - ОпределяемыйТип.ВладелецШаблонаСообщения - владелец контекстного шаблона.
	//   ШаблонПоВнешнейОбработке - Булево - если Истина, то шаблон формируется внешней обработкой.
	//   ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка, в которой содержится шаблон.
	//   ПодписьИПечать   - Булево - добавляет факсимильную подпись и печать в печатную форму. Только для шаблонов
	
	Наименование 		= "Шаблон - списание товаров";

	ПараметрыШаблона.Назначение 				= "Оповещение - процедура ""Списание товара""";  
	ПараметрыШаблона.ТипШаблона					= "Письмо";
	ПараметрыШаблона.ПолноеИмяТипаНазначения	= "Документ._ДемоСписаниеТоваров";
    ПараметрыШаблона.ФорматПисьма 				= Перечисления.СпособыРедактированияЭлектронныхПисем.HTML;
	ПараметрыШаблона.Тема                       = "Создано списание [_ДемоСписаниеТоваров.Номер] от [_ДемоСписаниеТоваров.Дата]";
	
	ТестШаблонаСообщения = "Списание [_ДемоСписаниеТоваров.Номер] создано"+Символы.ПС
							+"Ответственный [_ДемоСписаниеТоваров.Ответственный]"+Символы.ПС
							+"МестоХранения [_ДемоСписаниеТоваров.МестоХранения]"+Символы.ПС
							+"Основная организация [_ДемоСписаниеТоваров.Организация]";	
	
	ПараметрыШаблона.Текст  = ТестШаблонаСообщения;
	
	ПолученныйШаблон 	= ШаблоныСообщений.СоздатьШаблон(Наименование,ПараметрыШаблона);
	
КонецПроцедуры	

Проверяя корректность, нажав соответствующую кнопку «Проверить шаблон» — вижу сообщение «Шаблон заполнен корректно«. Все, могу его использовать.

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

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

Теперь, во второй части статьи, попробуем отправить этот шаблон как электронное письмо.

Пример отправки сообщения по созданному шаблону

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

Для этого дополним наш код такими процедурами (с привязкой к кнопке):

&НаКлиенте
Процедура ОтправитьСообщение(Команда)
	
	ПодготовитьПисьмоПоШаблону();

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

&НаСервере
Процедура ПодготовитьПисьмоПоШаблону()

	УИД = Новый УникальныйИдентификатор();
	
	Шаблон = ЭтаФорма.ВыбШаблон;
	Предмет = ЭтаФорма.ВыбДок;
	
	// вернет просто структуру
	//СтруктураДляОтправки = ШаблоныСообщений.СформироватьСообщение(Шаблон, Предмет, УИД, );
	
	
	// отправит письмо и вернет структуру
	СтруктураДляОтправки = ШаблоныСообщений.СформироватьСообщениеИОтправить(Шаблон, Предмет, УИД, );
	
	
	Сообщить("");
	
КонецПроцедуры

Где, Шаблон — это наш созданный шаблон, а Предмет — это ссылка на документ «Списание со склада«. Результат выполнения кода — созданное электронное письмо исходящее вот такого вида:

Результат отправки - письмо заполнено по нашему шаблону.

Результат отправки — письмо заполнено по нашему шаблону.

В комментарии письма написано, что оно создано по шаблону:

 В комментарии написано по какому шаблону создано.

В комментарии написано по какому шаблону создано.

Общий код всей обработки вот такой:

&НаКлиенте
Процедура СоздатьШаблон(Команда)

	СоздатьШаблонНаСервере();
	
КонецПроцедуры   

&НаСервере
Процедура СоздатьШаблонНаСервере()
	
	ПараметрыШаблона 	= ШаблоныСообщений.ОписаниеПараметровШаблона();
		
	//  Структура:
	//   Наименование - Строка - наименование шаблона.
	//   Текст        - Строка - текст шаблона.
	//   Тема         - Строка - текст темы электронного письма.
	//   ТипШаблона   - Строка - тип "Письмо" или "SMS".
	//   Назначение   - Строка - Например, Заказ поставщику.
	//   ПолноеИмяТипаНазначения - Строка - Документ.ЗаказПокупателя параметры доступны все его реквизиты.
	//   ФорматПисьма    - ПеречислениеСсылка.СпособыРедактированияЭлектронныхПисем HTML или ОбычныйТекст.
	//   УпаковатьВАрхив - Булево - если Истина, Только для шаблонов электронной почты.
	//   ТранслитерироватьИменаФайлов - Булево - "Schet na oplaty.pdf".
	//   ФорматыВложений - СписокЗначений - список форматов вложений. Только для шаблонов электронной почты.
	//   ВладелецШаблона - ОпределяемыйТип.ВладелецШаблонаСообщения - владелец контекстного шаблона.
	//   ШаблонПоВнешнейОбработке - Булево - если Истина, то шаблон формируется внешней обработкой.
	//   ВнешняяОбработка - СправочникСсылка.ДополнительныеОтчетыИОбработки - внешняя обработка, в которой содержится шаблон.
	//   ПодписьИПечать   - Булево - добавляет факсимильную подпись и печать в печатную форму. Только для шаблонов
	
	Наименование 		= "Шаблон - списание товаров";

	ПараметрыШаблона.Назначение 				= "Оповещение - процедура ""Списание товара""";  
	ПараметрыШаблона.ТипШаблона					= "Письмо";
	ПараметрыШаблона.ПолноеИмяТипаНазначения	= "Документ._ДемоСписаниеТоваров";
    ПараметрыШаблона.ФорматПисьма 				= Перечисления.СпособыРедактированияЭлектронныхПисем.HTML;
	ПараметрыШаблона.Тема                       = "Создано списание [_ДемоСписаниеТоваров.Номер] от [_ДемоСписаниеТоваров.Дата]";
	
	ТестШаблонаСообщения = "Списание [_ДемоСписаниеТоваров.Номер] создано"+Символы.ПС
							+"Ответственный [_ДемоСписаниеТоваров.Ответственный]"+Символы.ПС
							+"МестоХранения [_ДемоСписаниеТоваров.МестоХранения]"+Символы.ПС
							+"Основная организация [_ДемоСписаниеТоваров.Организация]";	
	
	ПараметрыШаблона.Текст  = ТестШаблонаСообщения;
	
	ПолученныйШаблон 	= ШаблоныСообщений.СоздатьШаблон(Наименование,ПараметрыШаблона);
	
КонецПроцедуры	

&НаКлиенте
Процедура ОтправитьСообщение(Команда)
	
	ПодготовитьПисьмоПоШаблону();

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

&НаСервере
Процедура ПодготовитьПисьмоПоШаблону()

	УИД = Новый УникальныйИдентификатор();
	
	Шаблон = ЭтаФорма.ВыбШаблон;
	Предмет = ЭтаФорма.ВыбДок;
	
	// вернет просто структуру
	//СтруктураДляОтправки = ШаблоныСообщений.СформироватьСообщение(Шаблон, Предмет, УИД, );
	
	
	// отправит письмо и вернет структуру
	СтруктураДляОтправки = ШаблоныСообщений.СформироватьСообщениеИОтправить(Шаблон, Предмет, УИД, );
	
	
	Сообщить("");
	
КонецПроцедуры

Пожалуй, на этом закончим второй раздел и перейдем к заключению и выводам:

 Заключение и выводы

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

В статье рассмотрены основы функционала, который можно применять в современных типовых конфигурациях. Я думаю, что данный материал будет полезен всем желающим — всем, кто хочет разобраться в этих модулях — подсистеме «Шаблоны сообщений«. Развитие практики этого функционала оставляю на ваше усмотрение.

Обратите внимание на другие мои «чисто-практические статьи» по современному функционалу библиотеки стандартных подсистем, написанных мной ранее. Статьи будут так же полезны вам на практике.

  • Операция отменена ошибка фн 235 эвотор что делать
  • Операция отклонена ошибки 200 идентичный документ был отправлен ранее
  • Операция отклонена ошибка 988
  • Операция отклонена картой код ошибки 14
  • Операция не удалась 1007 внутренняя системная ошибка при вызове веб сервиса