[Alimir_BootModal_Login]

Создание конфигураций 1С: пишем "Дни рождения" часть 5/6

Автор уроков и преподаватель школы: Владимир Милькин

Продолжаем разработку конфигурации "Дни рождения" на 1С.

Шаг №33: добавляем в модуль формы процедуру поиска

Перейдём в модуль формы (закладка "Модуль") и добавим процедуру, которая перебирает все элементы справочника "Люди" (поэтому она выполняется на сервере), находит человека у которого день рождения ближе всего и выводит его данные в надписи на форме:

02

Я попробовал написать сам, покажите мне эталонный вариант
 
 

Шаг №34: добавляем обработчик команды "Поиск"

Чтобы вызвать эту процедуру, добавим обработчик для команды "Поиск". Для этого выделим двойным щелчком  команду "Поиск" на закладке "Команды формы":

97

В открывшемся окне свойств нажмём на кнопку лупа рядом с пунктом "Действие":

98

Первоначально команда будет срабатывать на клиенте:

99

Нас перенесёт в модуль формы в автоматически созданную процедуру "Поиск", которая будет вызываться при каждом нажатии на кнопку, которую мы связали с командой "Поиск":

100

 
 

Шаг №35: добавляем вызов процедуры поиска в обработчик

Наконец, напишем в обработчике команды вызов процедуры "ПоискНаСервере", которую мы определили ранее:

101

 
 

Шаг №36: проверяем обработку

Проверим, что получилось. Запустим 1С:Предприятие и откроем нашу обработку ("Сервис"->"Поиск ближайшего дня рождения"):

102

Нажмём кнопку "Поиск":

103

И увидим как на форму выведутся данные человека, у которого день рождения ближе всех на сегодняшний день:

104

Отлично.

 
 

Шаг №37: делаем открытие элемента по нажатию на надпись с именем

А давайте сделаем так, чтобы при нажатии на имя и фамилию человека (то есть на элемент "НадписьИмя" у нас происходило открытие элемента справочника "Люди" с данными этого человека.

Для этого двойным щелчком откроем свойства элемента "НадписьИмя":

105

В окне со свойствами установим галку "Гиперссылка" (чтобы можно было нажимать на надпись как на гиперссылку):

106

и нажмём на кнопку лупа рядом с событием "Нажатие":

107

Действие при нажатии будет происходить на клиенте:

108

Нас перенесёт в автоматически созданную процедуру "НадписьИмяНажатие", которая будет вызываться каждый раз при нажатии на надпись:

109

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

Но проблема в том, что код процедуры "ПоискНаСервере" выполняется на сервере, а нажатие на надпись (и соответственно процедура "НадписьИмяНажатие") выполняется на клиенте.

Клиент и сервер - это две разные области выполнения, которые взаимодействуют друг с другом по особым правилам.

И для того, чтобы мы смогли "достучаться" до имени "СсылкаНаСчастливчика"  с клиента при том, что установлено оно на сервере - мы должны завести реквизит формы с таким именем.

Для этого перейдём на закладку "Реквизиты" на нашей форме и нажмём зелёную кнопку плюсик:

110

Добавится реквизит, выделим его двойным щелчком:

111

Откроется окно со свойствами. В поле "Имя" установим то самое "СсылкаНаСчастливчика", а в поле "Тип" установим "СправочникСсылка.Люди":

112

Отлично. Теперь допишем процедуру "НадписьИмяНажатие" так, чтобы открылась форма нужного элемента справочника "Люди". Смотрите комментарии - там подробно всё расписано. Код открытия элемента справочника довольно типовой:

113

 
 

Шаг №38: проверяем нажатие

Запустим 1С:Предприятие, чтобы убедиться, что всё работает. Снова откроем обработку, нажмём кнопку "Поиск" и попробуем нажать на имя и фамилию найдённого человека:

114

Откроется форма элемента справочник с этим человеком:

115

Эталонная база, после выполнения всех шагов этого урока

Для учеников

Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин

[Alimir_BootModal_Login]