Основы разработки прикладных решений для 1С:Предприятие 8.1

Справочники, конструирование форм

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

4.1. Документы и справочники

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

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

Контрагенты - для хранения сведений о контрагентах;

ПредставителиКонтрагентов - для хранения сведений о представителях контрагентов;

ЕдиницыИзмерения - для хранения информации о единицах измерения номенклатуры;

Номенклатура - для хранения данных о материалах, товарах, услугах;

Подразделения - для описания подразделений организации;

Сотрудники - для описания списка сотрудников организации;

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

4.2. Справочники: Контрагенты и ПредставителиКонтрагентов

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

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

Создадим справочник Контрагенты. Это будет иерархический справочник, который содержит основные сведения о контрагентах. Рассмотрим настройки вкладок окна параметров этого справочника.

На вкладке Основные мы зададим имя справочника Контрагенты и такой же синоним.

Вкладка ).

(рис 4.1) Справочник Контрагенты, вкладка Иерархия

Рассмотрим установки, которые можно сделать на этой вкладке.

Иерархический справочник. Этот флажок по умолчанию сброшен. То есть, новые справочники по умолчанию не являются иерархическими.

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

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

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

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

Перейдем на вкладку ) и зададим ему следующие реквизиты (табл. 4.1).

Реквизиты справочника Контрагенты
Имя реквизита Тип Параметры типа
ПолноеНаименование Строка Длина: 50
КонтактныеСведения Строка Длина: 100
(рис 4.2) Справочник Контрагенты, вкладка Данные

Теперь займемся справочником ПредставителиКонтрагентов.

На вкладке ), которое содержит список объектов, которые можно назначить владельцами справочника.

(рис 4.3) Справочник ПредставителиКонтрагентов, вкладка Владельцы

В появившемся окне .

(рис 4.4) Справочник ПредставителиКонтрагентов, вкладка Владельцы

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

Перейдем на вкладку ).

(рис 4.5) Подготовка к копированию реквизитов одного справочника в другой

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

Реквизиты справочника ПредставителиКонтрагентов
Имя реквизита Тип Параметры типа
Фамилия Строка Длина: 30
Имя Строка Длина: 30
Отчество Строка Длина: 30
Телефон Строка Длина: 30
Примечание Строка Длина: 100

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

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

Создадим в справочнике ) нам обычно нужно лишь заполнить наименование группы.

(рис 4.6) Создание новой группы в справочнике Контрагенты

Код присваивается автоматически, поле ).

(рис 4.7) Создание подгруппы Постоянные в группе Поставщики справочника Контрагенты

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

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

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

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

(рис 4.8) Создание нового элемента справочника Контрагенты

Сохраним созданный элемент нажатием на кнопку ) и сохраним его.

(рис 4.9) Создание элемента подчиненного справочника Контрагенты

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

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

4.3. Механизм форм по умолчанию

Мы уже создали немало объектов, но пока не занимались редактированием их форм. Лишь форму констант мы создавали явно. Формы справочников были созданы автоматически. 1С:Предприятие автоматически создает нужные формы объектов. Такие формы поддерживают лишь минимально необходимую функциональность - ввод, просмотр и изменение данных объектов. Эти формы создаются "на лету" в ходе работы пользователя с объектом. Если форма должна поддерживать какую-нибудь дополнительную функциональность - она должна быть создана при проектировании объекта. Например, выше мы столкнулись с необходимостью выводить элементы подчиненного справочника в форме справочника Контрагенты. Автоматически подобная функциональность не создается.

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

4.4. Доработка формы списка справочника Контрагенты

Откроем в конфигураторе окно свойств справочника ).

(рис 4.10) Вкладка Формы окна свойств справочника Контрагенты

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

(рис 4.11) Конструктор формы справочника, первый шаг

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

(рис 4.12) Конструктор формы справочника, второй шаг

Здесь мы можем видеть список реквизитов формы. В частности, это реквизиты ).

(рис 4.13) Результат работы конструктора форм

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

Мы должны доработать видимую часть формы. Здесь можно поступить двумя путями.

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

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

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

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

Теперь, когда все готово, добавим на форму новый элемент управления Табличное поле. Для этого щелкнем по кнопке Табличное поле (она расположена на панели инструментов, которая находится в нижней части окна программы) и с помощью мыши "нарисуем" прямоугольник, в котором будет располагаться новое табличное поле. Зададим следующие свойства нового табличного поля, табл. 4.3.

Свойства нового табличного поля
Свойство Значение
Имя ПредставителиКонтрагентов
ТипЗначения СправочникСписок.ПредставителиКонтрагентов
Связь по владельцу СправочникСписок.ПриАктивизацииСтроки

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

(рис 4.14) Настройка свойств нового табличного поля

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

После указанных операций, кроме прочих изменений, список реквизитов формы (вкладка Реквизиты окна редактирования формы) будет пополнен новым реквизитом ПредставителиКонтрагентов (именно он указан в свойстве Данные табличного поля, которое заполняется автоматически при указании типа поля) с типом СправочникСписок.ПредставителиКонтрагентов.

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

Свойства новой колонки табличного поля
Свойство Значение
Имя Телефон
Данные Телефон

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

(рис 4.15) Настройка свойств столбца табличного поля

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

(рис 4.16) Форма списка справочника Контрагенты в режиме 1С:Предприятие, контекстное меню табличного поля ПредставителиКонтрагентов

В режиме конфигурирования разместим на форме элемент управления Командная панель. Настроим ее в соответствии с табл. 4.5.

Свойства командной панели
Свойство Значение
Имя КоманднаяПанельПредставителей
АвтоЗаполнение Истина (флажок нужно установить)
ИсточникДействий ПредставителиКонтрагентов

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

(рис 4.17) Добавление командной панели и настройка ее свойств

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

(рис 4.18) Доработанная форма списка справочника Контрагенты в режиме 1С:Предприятие

4.5. Создание дополнительных справочников

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

Создадим справочник ЕдиницыИзмерения. В таблице 4.6 приведены параметры этого справочника. Здесь и далее в подобных таблицах приведена информация лишь о тех параметрах, которые мы изменяем.

Параметры справочника ЕдиницыИзмерения
Вкладка окна редактирования объекта Параметр Значение
Основные Имя ЕдиницыИзмерения
Данные Длина наименования 100
Формы Редактирование В списке

Для простых справочников, которые содержат немного реквизитов и для которых не нужно проводить какую-либо обработку данных сразу же после ввода их в форму, можно задавать вариант редактирования В списке. Он предусматривает редактирование элемента справочника в форме списка справочника без вызова формы элемента. В этом справочнике мы планируем использовать реквизит Наименование (напомним, что у справочников, по умолчанию, есть два реквизита - Код и Наименование, их не нужно создавать) для хранения названия единицы измерения. Другие реквизиты нам не понадобятся.

Создадим справочник Номенклатура. (табл. 4.7).

Параметры справочника Номенклатура
Вкладка окна редактирования объекта Параметр Значение
Основные Имя Номенклатура
Иерархия Иерархический справочник Истина (флаг установлен)
Данные Длина наименования 100
Реквизит ЕдиницаИзмерения Тип: СправочникСсылка.ЕдиницыИзмерения
Реквизит Услуга Тип: Булево

Создадим справочник Подразделения (табл. 4.8).

Параметры справочника Подразделения
Вкладка окна редактирования объекта Параметр Значение
Основные Имя Подразделения
Данные Длина наименования 100
Формы Редактирование В списке

Создадим справочник Сотрудники (табл. 4.9),

Параметры справочника Сотрудники
Вкладка окна редактирования объекта Параметр Значение
Основные Имя Сотрудники
Данные Длина наименования 100
Реквизит ФизическоеЛицо СправочникСсылка.ФизическиеЛица
Реквизит Подразделение СправочникСсылка.Подразделения
Реквизит ПриказОПриемеНаРаботу Строка, длина 50

Логика работы с данным справочником такова. ФизическоеЛицо, данные о котором хранятся в справочнике ФизическиеЛица, принимается на работу в определенное подразделение организации, данные об этом фиксируются в справочнике Сотрудники. Реквизит ПриказОПриемеНаРаботу нужен для хранения данных о приказе, которым работник был принят на работу (например: Приказ №1 от 01.01.2010).

Доработаем форму элемента справочника таким образом, чтобы его реквизит Наименование заполнялся автоматически при вводе или изменении данных в полях ФизическоеЛицо или Подразделение, и, в результате содержал бы текст такого вида: Фамилия И.О. (Подразделение).

Перейдем на вкладку окна редактирования объекта ).

(рис 4.19) События поля ввода формы элемента справочника Сотрудники

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

Выделим поле ввода .

(рис 4.20) Обработчик события поля

Процедура ФизическоеЛицоПриИзменении создается автоматически. Она будет использоваться в качестве обработчика события в том случае, если будет указана в поле ПриИзменении. Это уже сделано при ее создании. То есть, другими словами, имя процедуры значения не имеет. Значение имеет то, что эта процедура будет указана в поле ПриИзменении окна свойств поля ввода Физическое лицо. Не каждая процедура может быть выбрана в качестве обработчика события. В частности, в нашем случае процедура должна иметь один параметр.

Приступим к написанию текста процедуры. Он будет таким:

Наименование = ФизическоеЛицо.Наименование +" ("+Подразделение.Наименование+")";

Здесь Наименование соответствует реквизиту Данные поля с именем Наименование. Мы можем обращаться к нему напрямую, записывая данные, которые отобразятся в поле Наименование.

ФизическоеЛицо.Наименование дает нам доступ к реквизиту Наименование элемента справочника ФизическиеЛица, подобранного в поле ФизическоеЛицо. Аналогично, код Подразделение.Наименование позволяет работать с реквизитом Наименование элемента справочника Подразделения, который подобран в поле Подразделение. Здесь, опять же, мы обращаемся не к элементу управления (то есть - не к полю), а к данным, которые оно содержит и которые задаются его свойством Данные.

Знак "+" используется для конкатенации (связывания) строк. Символы, заключенные в кавычки интерпретируются системой как текст.

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

(рис 4.21) Помощь при наборе текста модуля

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

(рис 4.22) Синтакс-помощник

Создадим обработчик события .

(рис 4.23) Тексты процедур обработчиков событий

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

Процедура СформироватьНаименование ()
	 Наименование = ФизическоеЛицо.Наименование +
	 " ("+Подразделение.Наименование+")";
 КонецПроцедуры

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

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

На рис 4.24 вы можете видеть итоговый вариант кода модуля.

(рис 4.24) Тексты процедур обработчиков событий

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

Создадим новый элемент справочника .

(рис 4.25) Создание элемента справочника Сотрудники

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

(рис 4.26) Созданный элемент справочника Сотрудники

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

Мы, однако, пойдем другим путем - отредактируем свойство поля программно. Для этого перейдем в редактор модуля формы и, нажав на кнопку ) <ПриОткрытии> и нажмем на кнопку Перейти (или подтвердим выбор двойным щелчком мыши).

(рис 4.27) Создание обработчика события формы ПриОткрытии

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

Внесем в тело обработчика такой код:

ЭлементыФормы.Наименование.Доступность=Ложь;

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

На рис 4.28 вы можете видеть готовый текст обработчика.

(рис 4.28) Текст обработчика события формы ПриОткрытии

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

(рис 4.29) Результат изменения свойства поля в обработчике события формы ПриОткрытии

4.6. Выводы

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

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