6Глава Концепция управляемого приложения
Скачать 6.74 Mb.
|
Глава 4. Справочники 4.1. Окно редактирования справочника Справочник можно сравнить с картотекой, с неким списком данных, каждая запись которого имеет определенную структуру. В организации – независимо от того, автоматизирован ли в ней учет или нет, присутствует множество таких списков. Это – списки сотрудников, клиентов, товаров. В нашей конфигурации уже есть пара справочников. Один из них – это справочник Организации, который нужен для хранения списка организаций, по которым планируется вести учет. Справочник, сразу после его создания, имеет некоторые стандартные реквизиты. Это утверждение справедливо и для других объектов конфигурации. Для управления реквизитами объекта служит закладка Данные окна редактирования объекта, рис. 4.1. Рис. 4.1. Настройка справочника Ознакомиться со списком стандартных реквизитов можно, нажав на кнопку Стандартные реквизиты – появится окно, содержащее список таких реквизитов, рис. 4.2. 40 Рис. 4.2. Стандартные реквизиты справочника и их свойства Стандартные реквизиты поддерживают настройку некоторых свойств – для доступа к свойствам стандартного реквизита, достаточно выделить его в окне и обратиться к палитре Свойства. Нашему справочнику Организации не хватает, для полноты его использования в системе, реквизита, который содержал бы полное наименование организации. Добавим этот реквизит к справочнику – на вкладке Данные окна редактирования объекта, нажмем на кнопку Добавить, параметры реквизита будут следующими: Имя: ПолноеНаименование Тип: Строка, длина – 50. Проверка заполнения: Выдавать ошибку Свойство Проверка заполнения по умолчанию для новых реквизитов установлено в значение Не проверять. Оно позволяет автоматически проверять заполненность поля – если поле не заполнено – система выдаст ошибку. Если нам нужны особые алгоритмы проверки содержимого поля перед записью элемента справочника, мы можем реализовать эти алгоритмы самостоятельно. 41 Рис. 4.3. Настройка нового реквизита справочника Посмотрим на наш справочник в режиме 1С:Предприятие. Создадим новый элемент, дадим ему наименование УКБП, а полное наименование заполнять не будем, и попытаемся записать элемент, нажав на кнопку Записать и закрыть. Элемент не будет записан, мы увидим сообщение об ошибке – в виде сообщения и в виде всплывающей подсказки, рис. 4.4. Код элементу справочника будет присвоен автоматически. Справочники в 1С:Предприятие могут содержать предопределенные элементы. К их созданию можно перейти с вкладки Прочее, по кнопке Предопределенные. 42 Рис. 4.4. Создание нового элемента в справочнике организаций Следующим нашим справочником будет справочник ФизическиеЛица. Он предназначен для хранения списка физических лиц и сведений о них. В частности, мы хотели бы хранить данные о самом физическом лице (Фамилия, Имя, Отчество, дата рождения, пол, район проживания), а так же об истории его трудовой деятельности. Для хранения данных о физическом лице хорошо подойдут обычные реквизиты справочника, которыми мы уже занимались выше. А вот для того, чтобы хранить историю трудовой деятельности, нам понадобится другая структура данных, а именно – табличная часть. Табличная часть – это таблица, состав и свойства полей (столбцов) которой мы задаем на этапе разработки. В пользовательском режиме создается необходимое количество строк. В нашем примере количество мест, в которых работало физическое лицо, заранее неизвестно. Здесь надо отметить, что понятия "Сотрудник" и "Физическое лицо" - это разные вещи. Сотрудник – это тот, кто в настоящий момент работает в организации, и сотрудник обязательно является физическим лицом. А вот физическое лицо, сведения о котором могут храниться в базе данных организации, вполне может не являться сотрудником – например – это может быть кандидат на какую-либо должность, или, наоборот, уволенный сотрудник. Создадим новый справочник, дадим ему имя ФизическиеЛица, включим его в состав подсистем Справочники, Администрирование На вкладке Данные создадим следующие реквизиты: Имя: Фамилия Тип: Строка, длина 30 Имя: Имя Тип: Строка, длина 30 Имя: Отчество Тип: Строка, длина 30 Имя: ДатаРождения Тип: Дата, состав даты – Дата 43 Следующие реквизиты, которые мы планируем создать – это Пол и РайонПроживания. Строковые реквизиты, которые мы создавали выше, обычно заполняют вводом данных с клавиатуры. В случае же с указанием пола и района проживания заполнение с клавиатуры непременно приведет к появлению в базе различных наименований для одних и тех же показателей при использовании текстовых полей. Для мужского пола это вполне может быть, при ограничении длины строки одним символом, "М" и "м", для районов так же возможно различное написание. Для обеспечения единообразия при вводе подобных показателей рационально использовать для их хранения отдельные справочники или перечисления. Для хранения наименований пола мы воспользуемся перечислением. Создадим новое перечисление, дадим ему имя Пол, включим в подсистемы Справочники, Администрирование. На вкладке Данные окна редактирования объекта для перечисления задаются значения перечисления. Зададим два значения – Мужской и Женский. Теперь создадим новый справочник – дадим ему имя Районы, включим в состав подсистемы Справочники, на вкладке Данные изменим длину наименования до 100 символов, этот справочник не будет иметь дополнительных реквизитов, так же мы можем исключить его из состава общего реквизита Организация, рис. 4.5. Рис. 4.5. Создание справочника Районы Вернемся к настройке справочника ФизическиеЛица. Добавим еще два реквизита: Имя: Пол Тип: ПеречислениеСсылка.Пол Имя: РайонПроживания Тип: СправочникСсылка.Районы 44 Теперь займемся табличной частью справочника. При необходимости, справочники могут иметь несколько табличных частей. Сначала нажмем на кнопку Добавить табличную часть, зададим имя табличной части ТрудоваяИстория. В табличную часть добавим следующие реквизиты (поля), выделив табличную часть и нажав на кнопку Добавить реквизит: Имя: Организация Тип: Строка, длина 30 Имя: ДатаНачалаРаботы Тип: Дата, состав даты – Дата Имя: ДатаОкончанияРаботы Тип: Дата, состав даты – Дата. В итоге окно редактирования нашего справочника будет выглядеть так, как показано на рис. 4.6. Рис. 4.6. Состав справочника ФизическиеЛица Раньше мы создавали общий реквизит Организация, который планировалось добавлять ко многим объектам конфигурации. Справочник ФизическиеЛица имеет смысл вести по всем организациям. Как вы уже видели, настроить состав общего реквизита можно в ветви Общие реквизиты. Сделать это можно и в окне редактирования объекта, нажав кнопку Общие реквизиты на вкладке Данные. Нажмем эту вкладку и установим для общего реквизита Организация значение Не использовать (рис.4.7.). 45 Рис. 4.7. Настройка общих реквизитов из окна редактирования объекта Если решаемая нами задача требует каких-то особенных приемов работы с формой объекта, нам понадобится собственная форма, а не форма, сгенерированная автоматически. Например, это нам понадобится, если мы хотим автоматически заполнять поле Наименование на основе полей Фамилия, Имя и Отчество. А именно, мы хотели бы, чтобы наименование содержало фамилию и инициалы физического лица. 4.2. Разработка формы справочника Разработка формы осуществляется на закладке Форма конструктора справочника. Выберем форму элемента. Рис. 4.8. Первое окно конструктора форм справочника В следующем окне, рис. 4.9., мы можем указать состав реквизитов для расположения на форме, а так же указать количество колонок, которое нужно для расположения элементов управления на форме. Оставим здесь все так же по умолчанию и нажмем на кнопку Готово. 46 Рис. 4.9. Второе окно конструктора форм справочника После этого нужно открыть окно редактора форм для формы элемента справочника, рис. 4.10. 47 Рис. 4.10. Окно редактирования формы элемента справочника На самом деле, это окно объединяет в себе несколько редакторов и окон. В частности, это следующие: Редактор элементов формы (закладка Элементы в верхней левой части окна) – с его помощью можно контролировать элементы управления, которые будут расположены на форме. Выделив элемент в данном окне, мы можем настраивать его свойства в стандартной палитре свойств. Обратите внимание на кнопку Проверить, находящуюся в правой части командной панели закладки Элементы. Нажатие на нее приводит к выводу конструируемой формы в интерактивном виде, что позволяет лучше оценить ее внешний вид в пользовательском режиме, но, конечно, не дает возможности работать с данными информационной базы. Окно просмотра формы (закладка Форма в нижней части окна) – здесь представлена форма в том виде, который она примет после настроек. Кроме того, выделяя элементы формы в данном окне, мы, не имея возможности, как это было ранее, произвольно перемещать их, можем вызывать их контекстное меню, рис. 4.11., с помощью которого можно перемещать элемент вверх или вниз (то же самое можно делать в окне Элементы), открывать окно его свойств, назначать обработчики событий (их можно назначать и в окне Свойства, открытом для данного элемента). 48 Рис. 4.11. Работа с элементами формы Редактор реквизитов представлен вкладкой Реквизиты (рис. 4.11.). Для того, чтобы добавить реквизит объекта на форму (то есть – создать элемент управления, связанный с данным реквизитом), достаточно перетащить элемент из окна Реквизиты в окно Элементы. Реквизиты, уже присутствующие на форме, отмечены серым квадратиком. Редактор команд можно открыть, нажав на вкладку Команды. Здесь доступны три дополнительные вкладки. Вкладка Команды формы (по умолчанию пустая) содержит команды формы, их можно сравнить с командными кнопками, которые в версии 1С:Предприятие 8.1. можно было размещать на форме. Теперь последовательность действий выглядит так – сначала создать команду формы, потом перетащить ее в окно Элементы, настроить свойства, задать обработчики событий. Вкладка Стандартные команды (рис. 4.12.) содержит стандартный набор команд – в нашем случае – стандартный для формы и табличного поля, размещенного на форме. Вкладка Глобальные команды содержит набор команд уровня прикладного решения. Вкладка Параметры предоставляет доступ к редактору параметров. Вкладка Командный интерфейс позволяет редактировать командный интерфейс. 49 Рис. 4.12. Стандартные команды Реализуем автоматическое заполнение поля Наименование на основе полей Фамилия, Имя и Отчество. Для этого сначала настроим элемент управления, отображающий наименование на форме, таким образом, чтобы его нельзя было редактировать. Выделим элемент управления в панели Элементы, откроем окно его свойств и установим свойство ТолькоПросмотр, рис. 4.13. Благодаря этому свойству пользователь не сможет отредактировать текст в поле ввода. Похожего эффекта можно достичь и другими способами, например, указав в свойстве Вид элемента у элемента Наименование вместо Поле ввода – Поле надписи. 50 Рис. 4.13. Настройка элемента Наименование Для правильного формирования наименования важно, чтобы пользователь ввел данные в поля Фамилия, Имя и Отчество. 4.3. Клиентские методы в модуле формы Рассмотрим особенности формирования модуля формы объекта. Напишем процедуру, которая будет формировать наименование. Для этого нам нужно понимать, что конфигурации 1С:Предприятие управляются событиями – и сейчас нас интересуют события формы. Выделим форму в окне Элементы, откроем окно ее свойств и рассмотрим группу свойств События (рис. 4.14). Наименование должно быть сформировано до того, как данные объекта будут записаны. Для достижения нашей цели нам вполне подойдет событие ПередЗаписью. Здесь же можно выполнить какие-либо пользовательские проверки полей перед формированием наименования. Хотя, если говорить о производительности решения, лучше подобные проверки производить на сервере, например, с помощью обработчика события ОбработкаПроверкиЗаполнения, который создается в модуле объекта. Нажмем на кнопку с увеличительным стеклом в поле события ПередЗаписью – автоматически будет открыт модуль формы и создан пустой обработчик события ПередЗаписью. Он имеет следующий вид: &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) // Вставить содержимое обработчика. КонецПроцедуры> 51 Рис. 4.14. Выбор события для выполнения запланированных действий Из директивы компиляции &НаКлиенте понятно, что процедура это клиентская, она имеет два параметра – нас сейчас интересует параметр Отказ – благодаря этому параметру, а именно, установив его в значение Истина, мы можем отказаться от записи объекта в том случае, если выполняется какое-либо условие, препятствующее записи. В нашем случае записи объекта могут воспрепятствовать незаполненные или неправильно заполненные поля Фамилия, Имя или Отчество. Проверку на незаполненность реквизита мы можем доверить и системе – для этого можно установить свойство Проверка заполнения для нужных реквизитов в значение Выдавать ошибку, делается это в списке реквизитов объекта в окне редактирования объекта или в дереве конфигурации, рис. 4.15.. Не будем включать проверку заполнения, выполним ее и еще некоторые проверки самостоятельно. Параметры и процедуры в системе 1С:Предприятие по умолчанию передаются по ссылке – передав в процедуру некую переменную, мы, на самом деле, передаем ссылку на нее, то есть – при модификации соответствующего этой переменной параметра внутри процедуры, фактически, происходит и модификация переменной. Вернемся к нашей процедуре ПередЗаписью. В этой процедуре мы сначала проверим поля Фамилия, Имя и Отчество на заполненность (возможны и более сложные проверки), после чего, если хотя бы одно поле не заполнено – сообщим об этом пользователю и выйдем из процедуры, если все поля заполнены – сформируем наименование. Вот какой код позволяет реализовать эту задачу: 52 Рис. 4.15. Настройка проверки заполнения &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) //Переменная для хранения текста сообщения пользователю Перем ТекстСообщения; //Запишем пустую строку в переменную ТекстСообщения=""; //Если не введена фамилия... Если ПустаяСтрока(Объект.Фамилия) Тогда //Формируем строку сообщения ТекстСообщения=ТекстСообщения+"Не заполнено поле Фамилия;"; КонецЕсли; //Если не введено имя... Если ПустаяСтрока(Объект.Имя) Тогда ТекстСообщения=ТекстСообщения+" Не заполнено поле Имя;"; КонецЕсли; //Если не введено отчество... Если ПустаяСтрока(Объект.Отчество) Тогда ТекстСообщения=ТекстСообщения+" Не заполнено поле Отчество;"; КонецЕсли; //Если строка сообщения не пуста, то есть - содержит //сообщения о незаполненных полях Если НЕ ПустаяСтрока(ТекстСообщения) Тогда //Выводим сообщение Сообщить(ТекстСообщения); //Отказываемся от записи объекта Отказ=Истина; //Выходим из процедуры Возврат; КонецЕсли; 53 //Если все поля заполнены, выхода из процедуры не произошло, //формируем наименование Объект.Наименование=Объект.Фамилия+" "+ ВРег(Лев(Объект.Имя,1))+". "+ВРег(Лев(Объект.Отчество,1))+"."; КонецПроцедуры Строковая функция Лев позволяет получить заданное количество символов из строки, начиная с самого левого. Строковая функция ВРег переводит символы в верхний регистр – на тот случай, если пользователь случайно ввел имя, фамилию или отчество с маленькой буквы. В итоге мы получаем следующие сообщения об ошибках при незаполненности полей, рис. 4.16. Рис. 4.16. Сообщение об ошибке 4.4. Объект СообщениеПользователю Обратите внимание на то, что здесь мы пользуемся обычным методом Сообщить – мы выводим в окно сообщения одно сообщение, содержащее необходимые сведения. В 1С:Предприятие 8.2. мы можем поступить по-другому – вывести сообщения об ошибках или другие сведения, "привязав" их к полям, которые вызвали ошибки. Для этого можно воспользоваться объектом СообщениеПользователю. Он, помимо прочих полезных возможностей, позволяет формировать сообщения и "привязывать" их к реквизитам формы. Перепишем код таким образом, чтобы сообщения об ошибках (то есть, о незаполненных полях Фамилия, Имя, или Отчество), выявленных в процедуре ПередЗаписью, выводились бы в привязке к соответствующим элементам формы. Вот какой код позволяет этого добиться: &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) |