Основы разработки для платформы 1С:Предприятие 8.2 в режиме Управляемое приложение

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

Показывать лекцию целиком

Справочник Организации

Справочник можно сравнить с картотекой, с неким списком данных, каждая запись которого имеет определенную структуру. В организации – независимо от того, автоматизирован ли в ней учет или нет, присутствует множество таких списков. Это – списки сотрудников, клиентов, товаров.

В нашей конфигурации уже есть пара справочников. Один из них – это справочник .

(рис 3.1) Настройка справочника

Ознакомиться со списком стандартных реквизитов можно, нажав на кнопку .

(рис 3.2) Стандартные реквизиты справочника и их свойства

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

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

Имя: ПолноеНаименование

Тип: Строка, длина – 50.

Проверка заполнения: Выдавать ошибку

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

(рис 3.3) Настройка нового реквизита справочника

Посмотрим на наш справочник в режиме 1С:Предприятие. Создадим новый элемент, дадим ему наименование .

(рис 3.4) Сообщение об ошибке при попытке записи элемента справочника

Введем в поле .

(рис 3.5) Новый элемент справочника в списке

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

Код элементу справочника будет присвоен автоматически.

Справочники в 1С:Предприятие могут содержать предопределенные элементы. К их созданию можно перейти с вкладки Прочее, по кнопке Предопределенные.

Справочник ФизическиеЛица

Следующим нашим справочником будет справочник ФизическиеЛица. Он предназначен для хранения списка физических лиц и сведений о них. В частности, мы хотели бы хранить данные о самом физическом лице (Фамилия, Имя, Отчество, дата рождения, пол, район проживания), а так же об истории его трудовой деятельности. Для хранения данных о физическом лице хорошо подойдут обычные реквизиты справочника, которыми мы уже занимались выше. А вот для того, чтобы хранить историю трудовой деятельности, нам понадобится другая структура данных, а именно – табличная часть.

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

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

Создадим новый справочник, дадим ему имя ФизическиеЛица, включим его в состав подсистем БухгалтерскийУчет, УчетРаботыМастеров и РасчетЗаработнойПлаты.

На вкладке Данные создадим следующие реквизиты:

Имя: Фамилия

Тип: Строка, длина 30

Имя: Имя

Тип: Строка, длина 30

Имя: Отчество

Тип: Строка, длина 30

Имя: ДатаРождения

Тип: Дата, состав даты – Дата

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

Создадим новое перечисление, дадим ему имя .

(рис 3.6) Создание перечисления Пол

Теперь создадим новый справочник – дадим ему имя .

(рис 3.7) Создание справочника Районы

Вернемся к настройке справочника ФизическиеЛица. Добавим еще два реквизита:

Имя: Пол

Тип: ПеречислениеСсылка.Пол

Имя: РайонПроживания

Тип: СправочникСсылка.Районы

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

Имя: Организация

Тип: Строка, длина 30

Имя: ДатаНачалаРаботы

Тип: Дата, состав даты – Дата

Имя: ДатаОкончанияРаботы

Тип: Дата, состав даты – Дата.

В итоге окно редактирования нашего справочника будет выглядеть так, как показано на .

(рис 3.8) Состав справочника ФизическиеЛица

В предыдущей лекции мы создавали общий реквизит .

(рис 3.9) Настройка общих реквизитов из окна редактирования объекта

Если мы попытаемся открыть справочник в режиме 1С:Предприятие – с ним можно будет работать, так как система автоматически сгенерирует его форму, . – с автоматически созданными формами мы уже встречались ранее. Такие формы подходят в том случае, если мы не планируем каким-либо образом вмешиваться в функционирование формы из Конфигуратора.

(рис 3.10) Форма справочника, сгенерированная автоматически

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

Разработка формы справочника ФизическиеЛица

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

(рис 3.11) Вкладка Формы окна редактирования объекта

Нажмем на кнопку с увеличительным стеклом напротив поля .

(рис 3.12) Первое окно конструктора форм справочника

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

(рис 3.13) Второе окно конструктора форм справочника

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

(рис 3.14) Окно редактирования формы элемента справочника

На самом деле, это окно объединяет в себе несколько редакторов и окон. В частности, это следующие:

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

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

(рис 3.15) Работа с элементами формы

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

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

(рис 3.16) Стандартные команды

Вкладка Глобальные команды содержит набор команд уровня прикладного решения.

Вкладка Параметры предоставляет доступ к редактору параметров.

Вкладка Командный интерфейс позволяет редактировать командный интерфейс.

Реализуем автоматическое заполнение поля Наименование на основе полей Фамилия, Имя и Отчество.

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

(рис 3.17) Настройка элемента Наименование

Для правильного формирования наименования важно, чтобы пользователь ввел данные в поля Фамилия, Имя и Отчество.

Клиентские методы в модуле формы

Теперь перейдем к написанию кода, в котором будем формировать наименование. Для этого нам нужно понимать, что конфигурации 1С:Предприятие управляются событиями – и сейчас нас интересуют события формы.

Выделим форму в окне Элементы, откроем окно ее свойств и рассмотрим группу свойств .. Наименование должно быть сформировано до того, как данные объекта будут записаны. Для достижения нашей цели нам вполне подойдет событие ПередЗаписью. Здесь же можно выполнить какие-либо пользовательские проверки полей перед формированием наименования. Хотя, если говорить о производительности решения, лучше подобные проверки производить на сервере, например, с помощью обработчика события ОбработкаПроверкиЗаполнения, который создается в модуле объекта.

(рис 3.18) Выбор события для выполнения запланированных действий

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

НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
  // Вставить содержимое обработчика.
КонецПроцедуры>

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

(рис 3.19) Настройка проверки заполнения

Параметры и процедуры в системе 1С:Предприятие по умолчанию передаются по ссылке – передав в процедуру некую переменную, мы, на самом деле, передаем ссылку на нее, то есть – при модификации соответствующего этой переменной параметра внутри процедуры, фактически, происходит и модификация переменной. Вернемся к нашей процедуре ПередЗаписью.

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

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

Строковая функция Лев позволяет получить заданное количество символов из строки, начиная с самого левого. Строковая функция ВРег переводит символы в верхний регистр – на тот случай, если пользователь случайно ввел имя, фамилию или отчество с маленькой буквы. Конечно, здесь можно предусмотреть еще множество проверок и автоматических корректировок (например, можно исправить первую букву во введенных фамилии, имени и отчестве, если она случайно введена в нижнем регистре), мы ограничимся тем, что сделано сейчас.

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

(рис 3.20) Сообщение об ошибке

После успешного выполнения процедуры .

(рис 3.21) Новая запись в справочнике Физические лица

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

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

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

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

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

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

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

Если было сформировано несколько сообщений типа , 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.25.

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

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

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

Выводы

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

Видеоурок

Для данной лекции подготовлен видеоурок.

Вернуться к учебному плану