1С Предприятие. Практика программирования на платформе v7


Работа со слоями и закладками


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

Упражнение 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


Содержание раздела