Опубликован: 06.12.2011 | Уровень: для всех | Доступ: платный
Лекция 4:

Справочники, разработка форм

< Лекция 3 || Лекция 4: 123456 || Лекция 5 >

Объект СообщениеПользователю

Обратите внимание на то, что здесь мы пользуемся обычным методом Сообщить – мы выводим в окно сообщения одно сообщение, содержащее необходимые сведения. В 1С:Предприятие 8.2. мы можем поступить по-другому – вывести сообщения об ошибках или другие сведения, "привязав" их к полям, которые вызвали ошибки. Для этого можно воспользоваться объектом СообщениеПользователю. Он, помимо прочих полезных возможностей, позволяет формировать сообщения и "привязывать" их к реквизитам формы. Перепишем код таким образом, чтобы сообщения об ошибках (то есть, о незаполненных полях Фамилия, Имя, или Отчество), выявленных в процедуре ПередЗаписью, выводились бы в привязке к соответствующим элементам формы. Вот какой код позволяет этого добиться:

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

&НаКлиенте
//Процедура, формирующая и выводящая сообщение с переданными ей параметрами
Процедура СообщитьПользователю(ПутьКРеквизиту, Текст, Отказ)
 Сообщение=Новый СообщениеПользователю;
 Сообщение.Поле=ПутьКРеквизиту;
 Сообщение.Текст=Текст;
 Сообщение.Сообщить();
 Отказ=Истина;
КонецПроцедуры

Поясним приведенный код. Для начала, мы создали новую клиентскую процедуру СообщитьПользователю. Эта процедура принимает три параметра. Первый – ПутьКРеквизиту содержит строковый путь к полю, к которому должно быть привязано сообщение. Второй – Текст – содержит текст сообщения. Третий – Отказ – используется для установки в значение Истина параметра Отказ процедуры ПередЗаписью в том случае, если процедура СообщитьПользователю будет вызвана хотя бы один раз. А хотя бы однократный ее вызов означает, что одно из полей не заполнено, то есть наименование сформировать невозможно, соответственно, записать объект так же не получится.

Когда процедура вызывается, мы сначала создаем новый объект типа СообщениеПользователю. Затем его свойство Поле устанавливаем в значение параметра ПутьКРеквизиту. Этот параметр должен быть строковым и имеет, в нашем случае вид "Объект.Фамилия", "Объект.Имя", "Объект.Отчество" - это позволяет правильно "привязать" сообщение к полям формы. Свойство Текст объекта СообщениеПользователю содержит текст для вывода.

Мы, кроме того, полностью переработали процедуру ПередЗаписью. А именно, если проверка на заполнение поля указывает на то, что поле пустое, вызывается процедура СообщитьПользователю. По окончании проверок мы проверяем, установлен ли параметр Отказ в значение Истина – если не установлен – ни одна из проверок не завершилась обнаружением пустого поля и мы можем формировать наименование. Если установлен – наименование мы не формируем – и процедура заканчивает работу, а записи объекта, естественно, не происходит – пользователь видит лишь сообщения об ошибках.

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

Сообщение об ошибке, привязанное к полю Имя

Рис. 3.22. Сообщение об ошибке, привязанное к полю Имя
Сообщение об ошибке, привязанное к полю Отчество

Рис. 3.23. Сообщение об ошибке, привязанное к полю Отчество

Доведем до логического завершения пример со справочником ФизическиеЛица. Для этого заполним справочник Районы и введем в информационную базу сведения о следующих физических лицах:

Фамилия Имя Отчество Дата рождения Пол Район
Иванов Иван Иванович 27.02.1984 Мужской Ленинский
Петров Петр Петрович 12.06.1985 Мужской Ленинский
Васильев Павел Петрович 17.05.1985 Мужской Ленинский
Расчетчиков Александр Иванович 12.03.1980 Мужской Октябрьский
Александров Александр Александрович 17.09.1970 Мужской Октябрьский
Бухгалтерова Василиса Владимировна 13.08.1976 Женский Уральский
Обратите внимание на то, что справочник ФизическиеЛица – это пример справочника, с которым пользователям нашей информационной базы придется работать достаточно часто. В данный момент для того, чтобы создать новый элемент справочника, нам нужно выполнить несколько действий – перейти в раздел Расчет заработной платы, щелкнуть по ссылке, открывающей список справочника, после чего нажать на кнопку Создать новый элемент списка. Для того, чтобы сократить количество действий, необходимых для выполнения часто используемых операций, мы можем соответствующим образом настроить интерфейс нашего прикладного решения, в частности, поработать с панелью действий соответствующего раздела и с Рабочим столом.

Настройка командного интерфейса для ускорения доступа к справочнику

Добавим команду создания нового элемента справочника ФизическиеЛица в панель действий раздела Расчет заработной платы. Для этого откроем окно Все подсистемы командой контекстного меню ветви Подсистемы дерева конфигурации и установим флаг Видимость напротив команды Физические лица: Создать в области Панель действий.Создать, рис. 3.24.

Настройка панели действий раздела Расчет заработной платы

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

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

Для этого выполним команду контекстного меню корневого элемента конфигурации Открыть командный интерфейс рабочего стола

Выделим в поле Доступные команды команду Физические лица: создать, в поле состава командного интерфейса – команду Панель действий.Создать и нажмем на кнопку со значком ">" (Добавить команду на рабочий стол), которая находится между полями, после чего установим флаг Видимость для добавленной команды, рис 3.25.

Настройка панели действий Рабочего стола

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

Теперь, рис. 3.26., команда для быстрого создания элементов справочника ФизическиеЛица добавлена в панель действий Рабочего стола, аналогичная команда появилась в разделе Расчет заработной платы.

Новая команда в панели действий рабочего стола

Рис. 3.26. Новая команда в панели действий рабочего стола

Выводы

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

< Лекция 3 || Лекция 4: 123456 || Лекция 5 >
Лариса Дятчина
Лариса Дятчина

Код 

&НаКлиенте

Процедура ОсновноеКонтактноеЛицоПриИзменении(Элемент)

Если НЕ ПроверитьЗаполнениеРеквизита() Тогда

 Сообщить("Выбранное контактное лицо, "+Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента.");

КонецЕсли;

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

 

&НаСервере

Функция ПроверитьЗаполнениеРеквизита()

 Возврат (Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);  

КонецФункции

&НаСервере

Процедура УстановитьНомерПредставителя()

 

 Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения;

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

При проверке выдает ошибку:

{Справочник.Контрагенты.Форма.ФормаСписка.Форма(12,11)}: Переменная не определена (Объект)
 Возврат (<<?>>Объект.ОсновноеКонтактноеЛицо.ПредставительРаботает);   (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,2)}: Переменная не определена (Объект)
 <<?>>Объект.ТелефонКонтактногоЛица=Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(17,32)}: Переменная не определена (Объект)
 Объект.ТелефонКонтактногоЛица=<<?>>Объект.ОсновноеКонтактноеЛицо.КонтактныеСведения; (Проверка: Сервер)
{Справочник.Контрагенты.Форма.ФормаСписка.Форма(6,41)}: Переменная не определена (Объект)
 Сообщить("Выбранное контактное лицо, "+<<?>>Объект.ОсновноеКонтактноеЛицо+",не работает у контрагента."); (Проверка: Тонкий клиент)

 

работаю на версии 1С:Предприятие 8.3 (8.3.10.2650)

максим матасов
максим матасов