Здравствуйте. Интересует возможность получения диплома( https://intuit.ru/sites/default/files/diploma/examples/P/955/Nekommerch-2-1-PRF-example.jpg ). Курс пройден. Сертификат не подходит. В сертификате ошибка, указано по датам время прохождения около 14 дней, хотя написано 576 часов. |
Справочники, конструирование форм
4.5. Создание дополнительных справочников
Напомним, что этот урок мы начинали с разговора о создании документа ПоступлениеМатериалов. Для того, чтобы его создать нам понадобится добавить в систему еще несколько справочников.
Создадим справочник ЕдиницыИзмерения. В таблице 4.6 приведены параметры этого справочника. Здесь и далее в подобных таблицах приведена информация лишь о тех параметрах, которые мы изменяем.
Вкладка окна редактирования объекта | Параметр | Значение |
---|---|---|
Основные | Имя | ЕдиницыИзмерения |
Данные | Длина наименования | 100 |
Формы | Редактирование | В списке |
Для простых справочников, которые содержат немного реквизитов и для которых не нужно проводить какую-либо обработку данных сразу же после ввода их в форму, можно задавать вариант редактирования В списке. Он предусматривает редактирование элемента справочника в форме списка справочника без вызова формы элемента. В этом справочнике мы планируем использовать реквизит Наименование (напомним, что у справочников, по умолчанию, есть два реквизита - Код и Наименование, их не нужно создавать) для хранения названия единицы измерения. Другие реквизиты нам не понадобятся.
Создадим справочник Номенклатура. (табл. 4.7).
Создадим справочник Подразделения (табл. 4.8).
Вкладка окна редактирования объекта | Параметр | Значение |
---|---|---|
Основные | Имя | Подразделения |
Данные | Длина наименования | 100 |
Формы | Редактирование | В списке |
Создадим справочник Сотрудники (табл. 4.9),
Вкладка окна редактирования объекта | Параметр | Значение |
---|---|---|
Основные | Имя | Сотрудники |
Данные | Длина наименования | 100 |
Реквизит ФизическоеЛицо | СправочникСсылка.ФизическиеЛица | |
Реквизит Подразделение | СправочникСсылка.Подразделения | |
Реквизит ПриказОПриемеНаРаботу | Строка, длина 50 |
Логика работы с данным справочником такова. ФизическоеЛицо, данные о котором хранятся в справочнике ФизическиеЛица, принимается на работу в определенное подразделение организации, данные об этом фиксируются в справочнике Сотрудники. Реквизит ПриказОПриемеНаРаботу нужен для хранения данных о приказе, которым работник был принят на работу (например: Приказ №1 от 01.01.2010).
Доработаем форму элемента справочника таким образом, чтобы его реквизит Наименование заполнялся автоматически при вводе или изменении данных в полях ФизическоеЛицо или Подразделение, и, в результате содержал бы текст такого вида: Фамилия И.О. (Подразделение).
Перейдем на вкладку окна редактирования объекта Формы, нажмем кнопку Открыть в поле указания формы элемента. В появившемся окне конструктора форм сразу же нажмем на кнопку Готово. У нас получится автоматически созданная форма такого вида ( рис. 4.19).
Для того чтобы реализовать необходимую функциональность, нам нужно написать обработчики соответствующих событий полей ввода Физическое лицо и Подразделение. В частности, нас интересует событие ПриИзменении. Оно генерируется при изменении данных, хранящихся в поле. В частности, заполняя эти поля, мы будем подбирать нужные элементы из справочников, окончание подбора инициирует это событие.
Выделим поле ввода Физическое лицо и в окне его свойств нажмем на кнопку Открыть в поле ПриИзменении. В модуле формы будет создан обработчик соответствующего события, рис. 4.20.
Процедура ФизическоеЛицоПриИзменении создается автоматически. Она будет использоваться в качестве обработчика события в том случае, если будет указана в поле ПриИзменении. Это уже сделано при ее создании. То есть, другими словами, имя процедуры значения не имеет. Значение имеет то, что эта процедура будет указана в поле ПриИзменении окна свойств поля ввода Физическое лицо. Не каждая процедура может быть выбрана в качестве обработчика события. В частности, в нашем случае процедура должна иметь один параметр.
Приступим к написанию текста процедуры. Он будет таким:
Наименование = ФизическоеЛицо.Наименование +" ("+Подразделение.Наименование+")";
Здесь Наименование соответствует реквизиту Данные поля с именем Наименование. Мы можем обращаться к нему напрямую, записывая данные, которые отобразятся в поле Наименование.
ФизическоеЛицо.Наименование дает нам доступ к реквизиту Наименование элемента справочника ФизическиеЛица, подобранного в поле ФизическоеЛицо. Аналогично, код Подразделение.Наименование позволяет работать с реквизитом Наименование элемента справочника Подразделения, который подобран в поле Подразделение. Здесь, опять же, мы обращаемся не к элементу управления (то есть - не к полю), а к данным, которые оно содержит и которые задаются его свойством Данные.
Знак "+" используется для конкатенации (связывания) строк. Символы, заключенные в кавычки интерпретируются системой как текст.
При наборе текста работают подсказки. Например, на рис. 4.21 вы можете видеть окно редактора кода в ходе набора текста. После того, как мы ставим точку, набрав ФизическоеЛицо, выдается справка. Нужное свойство (или метод, то есть - функцию) можно выбрать из выведенного списка нажав клавишу Enter, когда оно будет выделено, или щелкнув по нему мышью, можно и проигнорировать подсказку, просто продолжив набор с клавиатуры.
Для того, чтобы получить справку по коду, можно воспользоваться функцией вызова так называемого Синтакс-помощника из окна редактирования модуля. Для того чтобы получить такую справку, нужно установить курсор в интересующий нас участок текста и нажать сочетание клавиш Ctrl + F1. Например, установим курсор на слово Процедура и нажмем Ctrl + F1. Откроется окно со справочной информацией ( рис. 4.22).
Создадим обработчик события ПриИзменении для поля Подразделение. Он будет таким же точно, каким был текст обработчика аналогичного события для поля Физическое лицо, рис. 4.23.
Это - типичная в программировании ситуация, когда один и тот же код используется в различных процедурах. Разумно будет вынести его в отдельную процедуру и вызывать эту процедуру в обработчиках событий. Создадим в модуле новую процедуру, введя с клавиатуры следующий код (код, находящийся в теле процедуры, можно добавить копированием из тела одной из других процедур, выделение, копирование, вырезание текста в редакторе модулей выполняется аналогично подобным операциям в любом текстовом редакторе):
Процедура СформироватьНаименование () Наименование = ФизическоеЛицо.Наименование + " ("+Подразделение.Наименование+")"; КонецПроцедуры
Для удобства можно разбивать длинные строки кода на несколько строк, мы можем это сделать, нажав Enter в нужном месте. Не следует разрывать переносом строки участки кода, заключенные в кавычки - при попытке сохранения такого кода мы получим сообщение об ошибке.
Одно из преимуществ выделения в отдельную процедуру одинакового кода, используемого в различных участках программы, заключается в том, что при необходимости внести изменения в этот код их можно внести лишь в общей процедуре. Например, если мы решим изменить способ формирования поля Наименование, мы можем внести изменения лишь в код процедуры СформироватьНаименование.
На рис. 4.24 вы можете видеть итоговый вариант кода модуля.
Проверим в режиме 1С:Предприятие работу только что созданного механизма. На практике работоспособность кода проверяют обычно не только в самом конце работы над ним, но и в процессе работы для того, чтобы убедиться в правильности хода разработки.
Создадим новый элемент справочника Сотрудники, и, заполняя его, заполним, выбором из справочника ФизическиеЛица поле Физическое лицо. Так как поле Подразделение пока пустое, в поле Наименование отобразится текст вида Фамилия И.О. (), рис. 4.25.
Выбрав подразделение, в котором работает сотрудник, мы снова инициируем процедуру формирования наименования. После заполнения всех полей нажмем на кнопку ОК и получим новый элемент справочника ( рис. 4.26).
Выполним еще одну модификацию формы элемента справочника Сотрудники. Можно заметить, что пользователь может свободно редактировать поле Наименование. То есть, он вполне может, после того, как поле заполнено автоматически, изменить его содержимое, нарушив желаемый шаблон заполнения. Для того, чтобы запретить пользователю менять содержимое поля, можно отредактировать свойство поля Доступность, сняв флаг, установленный по умолчанию, что сделает его недоступным для редактирования.
Мы, однако, пойдем другим путем - отредактируем свойство поля программно. Для этого перейдем в редактор модуля формы и, нажав на кнопку Процедуры и функции, которая расположена на панели управления в верхней части окна программы, выберем в появившемся окне ( рис. 4.27) <ПриОткрытии> и нажмем на кнопку Перейти (или подтвердим выбор двойным щелчком мыши).
Обработчик события ПриОткрытии выполняется при открытии формы, до ее показа пользователю, здесь можно настроить свойства элементов управления. Свойства элементов управления можно настраивать и после того, как форма отображена.
Внесем в тело обработчика такой код:
ЭлементыФормы.Наименование.Доступность=Ложь;
Свойство формы ЭлементыФормы дает доступ к коллекции элементов управления, расположенных на форме. При наборе этого текста действуют подсказки.
На рис. 4.28 вы можете видеть готовый текст обработчика.
Испытаем созданный механизм - при создании нового элемента справочника (или при открытии для редактирования уже существующего элемента) поле Наименование оказывается заблокированным для изменений пользователем, но в нем по-прежнему можно видеть данные, вносимые программно ( рис. 4.29).
4.6. Выводы
Напомним, что в начале этой лекции мы собирались создать документ ПоступлениеМатериалов. Для того, чтобы этот документ создать, нам понадобилось добавить в систему несколько новых справочников, настроить их. Сейчас все готово для того, чтобы начать работу над документом - в следующей лекции мы этим займемся.