Работа со слоями и закладками
Закладки позволяют, не перегружая видимую часть формы объекта, расположить в ней максимальное число элементов формы.
Упражнение 10. В форме справочника «Оборудование» разместите реквизиты формы справочника по слоям, создайте закладки и алгоритм управления формой.
Разделим форму по слоям. Для этого (при активном окне формы диалога объекта) выберем пункт главного меню «Диалог», а в нём пункт «Слои». В
появившемся окне «Слои» мы увидим один слой «Основной», создаваемый
по умолчанию.
Нажмём кнопку «Изменить», в появившемся окне «Слой» изменим
80_______________________ 1С:Предприятие. Практика программирования на платформе V7
идентификатор слоя на «А». Создадим новый слой, для этого нажмём кнопку «Новый» в окне «Слои» и зададим ему идентификатор «В».
Новый слой автоматически становится Видимым и Активным, слой «А» при этом станет только Видимым.
Нажмём кнопку «Закрыть», чтобы закончить редактирование слоев. Выделим реквизиты формы диалога,
VII. Справочники______________________________________________________________ 81
в пункте главного меню «Диалог» выберем пункт «Поместить» и поместим выбранные элементы диалога в слой «В».
Используя окна управления слоями, описанные выше, можно посмотреть, как расположились элементы формы диалога по слоям.
Для управления слоями используется метод формы
Форма. ИспользоватьСлой(«Имя_Слоя»,<Режим>)
<ИмяСлоя> - строковое выражение - название слоя формы, как оно задано в конфигураторе. Параметр может быть составным (указывать несколько слоев). В этом случае имена слоев перечисляются в строке через запятую.
<Режим> - необязательный параметр. Числовое выражение:
0 - скрыть слой <ИмяСлоя> в форме;
1 - показать слой <ИмяСлоя> в форме;
2 - показать слой <ИмяСлоя> и скрыть все остальные.
Значение по умолчанию - 2. Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Чтобы посмотреть, как переключаются слои можно создать кнопку для переключения слоев и поместить в неё вызов процедуры Переключить(). В качестве параметра переключения можно использовать значение текущего заголовка кнопки. Обратите внимание на свойства метода реквизитов формы Заголовок(): он работает как процедура , и как функция.
Метод Заголовок(<Название>) устанавливает заголовок элемента диалога. Возвращает текущий заголовок элемента диалога. <Название> - строковое выражение - новый заголовок колонки многострочной части формы, кнопки, рамки группы, текста, флажка, переключателя. Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
Чтобы к реквизиту формы можно было бы обратиться, его надо назвать, задать ему идентификатор. Зададим кнопке идентификатор - «Переключение» и Начальный заголовок — «Только А». Создадим в модуле формы справочника процедуру Переключить()
//Вызов процедуры в кнопке -
Переключить(Форма.Переключение.Заголовок())
82_______________________ 1С:Предприятие. Практика программирования на платформе V7
Процедура Переключить(ТекущийЗаголовок)
Если ТекущийЗаголовок="Только А" Тогда
Форма.ИспользоватьСлой("А",2) ;
Форма.Переключение.Заголовок("А и В");
Иначе
Форма.ИспользоватьСлой("А,В",2);
Форма.Переключение.Заголовок("Только А") ;
КонецЕсли;
КонецПроцедуры
|
|
Как правило для переключения по слоям в форме создают закладки. Интерактивное действие — выбор закладки обрабатывается в предопределенной процедуре модуля формы ПриВыбореЗакладки (), которая запускается в момент выбора закладки пользователем.
ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки):
<НомерЗакладки> - числовое значение – номер выбранной закладки формы.
<3начение3акладки> - значение выбранной закладки формы.
Чтобы сделать закладки в форме доступными надо установить флаг использования закладок.
VII. Справочники______________________________________________________________ 83
Упражнение 11. В форме элемента справочника «Оборудование» создайте закладки и алгоритм управления слоями.
Напишем в модуле формы процедуры для управления Закладками и Слоями. Атрибут формы Закладки имеет тип «СписокЗначений», поэтому для него доступны все методы этого объекта. Мы будем использовать метод форма.Закладки.Добавить3начение(3начение3акладки, «НазваниеЗакладки»).
//*******************************************
Процедура ПриВыбореЗакладки (НомерЗакладки,ЗначениеЗакладки)
Если НомерЗакладки =1 Тогда
Форма. Использовать Слой («А», 2);
ИначеЕсли НомерЗакладки =2 Тогда
Форма. Использовать Слой («В», 2);
Конецесли;
КонецПроцедуры
//*******************************************
Форма. ИспользоватьЗакладки (1);
Форма. Закладки. ДобавитьЗначение («», «А»);
Форма. Закладки. ДобавитьЗначение («», «В»);
Упражнение 12. (Необязательное) В форме элемента справочника «Оборудование» создайте закладку и Слой «Единицы», алгоритм переключения между слоями, реквизит формы ТаблицаЗначений с идентификатором «ТаблицаЕдиниц» на слое «Единицы» и алгоритм редактирования подчиненных элементов справочника Единицы из формы элемента справочника владельца.(Аналогичный алгоритм мы создали в Упражнении 3)
84_______________________ 1С:Предприятие. Практика программирования на платформе V7
В поле Формула таблицы значений вызывается процедура Редактироовать(ТаблицаЕдиниц.ТекущаяСтрока()), в параметр которой передается номер выбранной строки.
Метод ТекущаяСтрока(<Строка>) устанавливает или определяет текущую строку таблицы в элементе
диалога типа "ТаблицаЗначений". Возвращает число, соответствующее индексу текущей строки поля
диалога (до его изменения), или 0, если текущей строки нет. <Строка> - необязательный параметр.
Числовое выражение с задаваемым индексом строки для элемента диалога типа "ТаблицаЗначений", на
которую требуется установить курсор. Если параметр не задан, то положение курсора в поле диалога не
меняется."
Метод ПолучитьСтрокуПоНомеру(<Номер>) устанавливает в качестве текущей строки строку с
заданным номером.
Возвращает:
1 - если действие выполнено;
О - если действие не выполнено.
<Номер> - номер строки.
Метод Видимость(<Режим>) устанавливает режим отображения элемента диалога. Возвращает:
текущее числовое значение режима отображения элемента диалога (на момент до исполнения метода).
<Режим> - число: 1 - поле диалога отображается, 0 - поле диалога скрыто.
Доступ к методу возможен только в контексте Модуля формы через атрибут форма. Использование
данного метода для колонки табличной части формы не может изменять видимость отдельно для
совмещенных и многострочных колонок."
Метод ВвестиСтроку(<Строка>,<Подсказка>,<ДлинаСтроки>,<Признак>,<Таймаут>) вызывает
диалог для ввода строки.
Возвращает:
1 - если в диалоге нажата кнопка ОК;
0 - если нажата кнопка Отмена;
-1 - если закончилось время ожидания ответа.
<Строка> - имя переменной, объявленной в модуле для приема вводимого значения; <Подсказка> -
текст заголовка окна диалога ввода; <ДлинаСтроки> - длина вводимой строки;<Признак> - если 0 или
опущен - ввод одной строки, если 1 - ввод многострочного текста с разделителями строк; <Таймаут> -
число секунд времени ожидания ответа (если опущен или 0, то без ограничения).
Метод ВвестиЧисло(<Число>,<Подсказка>,<Длина>,<Точность>,<Таймаут>) вызывает диалог для
ввода числа.
Возвращает:
1 - если в диалоге нажата кнопка 'ОК';
О - если нажата кнопка 'Отмена';
-1 - если закончилось время ожидания ответа.
<Число> - имя переменной, объявленной в модуле для приема вводимого значения;<Подсказка> - текст
заголовка окна диалога ввода;<Длина> - длина вводимого числа;<Точность> - число знаков после
десятичной точки;<Таймаут> - число секунд времени ожидания ответа (если опущен или 0, то без
ограничения).
Предложенный ниже алгоритм можно перенести в модуль формы справочника «Оборудование» соблюдая структуру модуля. Методы реквизитов формы, в частности метод Видимость(), в предопределенной процедуре ПриВыбореЗакладки(,) работают иногда странно. Процедуру ИзменитьЕд(ЗначениеЕдиницы) предлагается написать самостоятельно.
Перем ФлагНового, Ед;
Процедура ЗагрузкаТаблицыЕдиниц()
Форма.Переключение.Видимость(0);
ТаблицаЕдиниц.УдалитьСтроки();
Если ФлагНового=1 Тогда
Записать();
VII. Справочники______________________________________________________________ 85_
КонецЕсли;
Ед.ИспользоватьВладельца(ТекущийЭлемент());
Ед.ВыбратьЭлементы();
Пока Ед.ПолучитьЭлемент()=1 Цикл
ТаблицаЕдиниц.НоваяСтрока();
ТаблицаЕдиниц.Наим=Ед.ТекущийЭлемент();
ТаблицаЕдиниц.К=Ед.Коэффициент;
КонецЦикла;
КонецПроцедуры
Процедура УдалитьЕд(ЗначениеЕдиницы)
ТаблицаЕдиниц.ПолучитьСтрокуПоНомеру(ЗначениеЕдиницы);
Ед.НайтиЭлемент(ТаблицаЕдиниц.Наим);
Ед.Удалить();
ЗагрузкаТаблицыЕдиниц();
КонецПроцедуры
Процедура ДобавитьЕд()
Перем Стр,К;
Ед . Новый ( ) ;
ВвестиСтроку(Стр,"Введите наименование",25);
Ед.Наименование=Стр;
ВвестиЧисло(К,"Введите коэффициент",7,0);
Ед. Коэффициент= К;
Ед.Записать();
ЗагрузкаТаблицыЕдиниц();
КонецПроцедуры
// В поле Формула таблицы значений вызывается процедура
//Редактировать(ТаблицаЕдиниц.ТекущаяСтрока())
Процедура Редактировать(НомерСтрокиТаблицыЗначений)
Перем Зн,Поз;
СпЗн=СоздатьОбъект("СписокЗначений");
СпЗн.ДобавитьЗначение("","Удалить");
СпЗн.ДобавитьЗначение("","Добавить");
СпЗн.ДобавитьЗначение("","Изменить");
СпЗн.ВыбратьЗначение(Зн,"Выберите действие",Поз,,1);
86_______________________ 1С:Предприятие. Практика программирования на платформе V7
Если Поз=1 Тогда
УдалитьЕд(НомерСтрокиТаблицыЗначений);
КначеЕсли Поз = 2 Тогда
ДобавитьЕд();
Иначе
ИзменитьЕд(НомерСтрокиТаблицыЗначений);
КонецЕсли;
КонецПроцедуры
Процедура ПриВыбореЗакладки(НомерЗакладки,ЗначениеЗакладки)
Если НомерЗакладки=1 Тогда
Форма.ИспользоватьСлой("А,В",2);
Иначе
Форма.ИспользоватьСлой("А,Единицы",2);
ТаблицаЕдиниц.Очистить();
ТаблицаЕдиниц.НоваяКолонка("Наим",,,,"Единица",10,,);
ТаблицаЕдиниц.НоваяКолонка("К",,,,"Коэф.",10,,);
ЗагрузкаТаблицыЕдиниц{);
КонецЕсли;
КонецПроцедуры
//____________________________________________
Форма.ИспользоватьЗакладки(1);
Форма. Закладки. ДобавитьЗначение ("", "Реквизиты");
Форма. Закладки. ДобавитьЗначение ("", "Единицы");
Форма.ИспользоватьСлой("А,В",2);
Ед=Создать0бъект("Справочник.Единицы");
ФлагНового=0;
Режим выборки групп в форме списка справочника.
По умолчанию, выборка элементов справочников для полей диалога в формах документов, журналов и формах списков справочников установлена без выбора групп, а в форме отчета с выбором групп. Если Вы хотите изменить режим выборки групп, используйте метод ВыборГруппы(<?>).
Методы определения префиксов авто нумерации
Префиксы авто нумерации создаются для удобства отбора или поиска записей в базе данных. В Предприятии есть два типа методов для определения
префиксов aвто нумерации. Метод ПрефиксАвтоНумерации (<ИмяВида>, <Префикс>)
\/II Справочники______________________________________________________________ 87
располагают, как правило, в глобальном модуле. Он позволяет установить префикс для автоматического создания новых номеров.Параметры: <ИмяВида> - строковое выражение с полным названием справочника или документа конфигурации. Для установки префикса сразу всем документам или справочникам используется символ "*" вместо идентификатора вида документа/справочника; <Префикс> - строковое выражение, задающее префикс номеров документов или кодов элементов справочника.
Методы описанные ниже вызывают обычно в предопределенных процедурах ВводНового() в модуле формы и ПриРедактированииНовойСтроки() в модуле формы списка справочника.
Метод ПрефиксКода(<Префикс>) позволяет установить текущий префикс кода для справочника. Возвращает строковое значение текущего префикса кодов элементов справочника (на момент до исполнения метода).
Метод УстановитьНовыйКод(<Префикс>) позволяет установить новый код элемента справочника с заданным префиксом. <Префикс> - строка с префиксом кода элемента справочника.
Вопросы для самоконтроля
Как задается область определения реквизитов справочников?
Для каких справочников определены атрибуты Владелец и Родитель?
Какое основное отличие в использовании и обращении к подчиненным и обычным справочникам?
Какие формы можно создать для интерактивного редактирования справочников?
В чем отличие конфигурирования периодических реквизитов справочников от конфигурирования периодических констант?
В чем отличие реквизитов формы и реквизитов объекта, как формата хранения данных?
Можно ли редактировать данные объекта, не открывая его интерактивную форму?
Можно ли управлять слоями в форме, не используя предопределенную процедуру ПриВыбореЗакладки()?
88_______________________ 1С:Предприятие. Практика программирования на платформе V7