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

Урок 19.
"Список значений и закладки в форме".

 

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

Для работы с закладками используется 2 объекта

  1. Объект Форма.  Этот объект не надо создавать с помощью команды СоздатьОбъект. По умолчанию объект Форма уже присутствует в форме. Переменную Форма описывать тоже не надо. К объекту Форма применяется метод: ИспользоватьЗакладки(Флаг), где флаг=1, чтобы разрешить работу с закладками, флаг=0, чтобы запретить использование закладок.
  2. Объект Форма.Закладки. Этот объект по сути является Списком Значений. И к этому объекту применимы ВСЕ методы объекта СписокЗначений. Добавляя в этот список значений любое значение, Вы тем самым добавляете новую закладку. Представление добавляемого значения используется в качестве имени закладки. Для закладок можно организовать сортировку, динамическую вставку или удаление (например, после установки флажка). 

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

Процедура ПриОткрытии()
    ФОрма.ИспользоватьЗакладки(1);  //разрешили использовать закладки
    форма.Закладки.ДобавитьЗначение("А","Первая"); //добавляем закладки
    форма.Закладки.ДобавитьЗначение("Б","Вторая");
    форма.Закладки.ДобавитьЗначение("В","Третья");
КонецПроцедуры

В результате выполнения процедуры будет добавлено 3 закладки. Называться они будут "Первая", "Вторая", "Третья". Добавленные значения А,.Б, В - пользователю будут недоступны и по этому эти значения Вы можете использовать по своему усмотрению (или не использовать вообще). После выполнения процедуры закладки в форме появятся сразу. Их можно будет переключать - система обеспечивает это автоматически. Но содержимое Вашей формы не будет меняться - это Вы должны обеспечить сами. В модуле формы, где расположены закладки, Вы должны использовать предопределенную процедуру ПриВыбореЗакладки(пар1, пар2). Эта процедура вызывается системой автоматически при смене  пользователем закладки. При этом пар1 и пар2 принимают определенные значения. Пар1 - номер закладки, выбранной пользователем; Пар2 - значение закладки - обратите внимание ЗНАЧЕНИЕ, а не представление. В процедуре Вы должны описать как должна измениться форма при выборе закладки.  Приведем простейший пример процедуры

Процедура ПриВыбореЗакладки(номер, зн)
    Если ЗН="А" тогда
        сообщить ("Вы выбрали закладку А");
        ///// 
        //... действия при выборе закладки А
        /////
    иначеЕсли ЗН="Б" тогда
        сообщить ("Вы выбрали закладку Б");
        ///// 
        //... действия при выборе закладки Б
        /////
    иначеЕсли ЗН="В" тогда
        сообщить ("Вы выбрали закладку В");
        ///// 
        //... действия при выборе закладки В
        /////
    конецЕсли;
конецПроцедуры

Очевидно, что действия при выборе закладки, чаще всего приводят к тому, что часть реквизитов прячется, а часть показывается. Можно, конечно, воспользоваться конструкцией форма.Реквизит.Видимость(1) или  форма.Реквизит.Видимость(0), но это долго и не продуктивно. Более удобном, является использование слоев в форме. Когда Вы находитесь в форме - выберите "Диалог" - "Слои". Откроется небольшое окно, где по умолчанию присутствует один слой - Основной. Но Вы можете добавить столько слоев сколько Вам надо. Подробно на этом останавливаться не буду. Подскажу лишь только, что в открывшемся окне - рисунок "глаз" означает, что слой сейчас видно в форме, рисунок "карандаш" означает, что все реквизиты, которые Вы сейчас будете добавлять  - будут находиться в этом слое. "Карандаши"  и "глаза" можно переставлять по разным слоям. Одновременно может быть видно несколько слоев (глаз напротив нескольких слоев). А "карандаш" всегда будет находиться только у одного слоя. 

Рекомендации по работе со слоями и закладками: как правило на каждую закладку создается по одному слою + один делается 1 слой, который будет содержать общие реквизиты, которые видны на любой закладке (например, кнопки "Ок", "Закрыть").

Управление слоями происходит с помощью метода ИспользоватьСлой, применяемого к объекту Форма. В общем виде метод выглядит так: Форма.ИспользоватьСлой(имяСлоя, параметр); ИмяСлоя - строка, название слоя,  как оно задано в конфигураторе, можно работать одновременно с несколькими слоями - в этом случае они перечисляются через запятую. Параметр - числовое значение 0 - скрыть слой <ИмяСлоя> в форме; 1 - показать слой <ИмяСлоя> в форме; 2 - показать слой <ИмяСлоя> и скрыть все остальные. Вернемся с нашему примеру с обработкой реакции системы на переключение закладок. Пусть у нас три закладки и 4 слоя "Первый" (для первой закладки), "Второй", "Третий" и "Основной" (слой с кнопками - общий для всех закладок). Как изменится процедура обработки выбора закладки: 

Процедура ПриВыбореЗакладки(номер, зн)
Если ЗН="А" тогда
    сообщить ("Вы выбрали закладку А");
    форма.ИспользоватьСлой("Основной,Первый",2);// показываем нужные слои, а остальные прячем
иначеЕсли ЗН="Б" тогда
    сообщить ("Вы выбрали закладку Б");
    форма.ИспользоватьСлой("Основной,Второй",2); // показываем нужные слои, а остальные прячем
иначеЕсли ЗН="В" тогда
    сообщить ("Вы выбрали закладку В");
    форма.ИспользоватьСлой("Основной,Третий",2); // показываем нужные слои, а остальные прячем
конецЕсли;
конецПроцедуры

Получается не очень красиво и длинно. Как сделать короче? Когда создаем закладки - в качестве значения надо указать строку с названием слоев, которые должны быть показаны в момент выбора закладки. Покажем на том же примере:  

Процедура ПриОткрытии()
    ФОрма.ИспользоватьЗакладки(1);  //разрешили использовать закладки
    форма.Закладки.ДобавитьЗначение("Основной,Первый","Первая"); //добавляем закладки и сразу указываем слои в значении
    форма.Закладки.ДобавитьЗначение("Основной,Второй","Вторая");
    форма.Закладки.ДобавитьЗначение("Основной,Третий","Третья");
КонецПроцедуры

Процедура ПриВыбореЗакладки(номер, зн)
    форма.ИспользоватьСлой(зн,2); //используем значение в качество показываемых слоев.
КонецПроцедуры

Важно: при работе со слоями в процедуре ПриОткрытии() надо не забыть указать слои которые будут видны при открытии формы - иначе отрываемая форма покажет сразу все слои.

Задачи для самостоятельно работы:

Задача 1. В форме создайте 2 кнопки "Добавить" и "Удалить".  Одна кнопка добавляет закладки по одной справа, другая, соответственно удаляет по одной справа. При добавлении закладки называются названиями месяцев, начиная с января. Как только "год" будет заполнен - закладки перестают добавляться.

Задача 2. Тот пример, который приводился на уроке доработайте так, чтобы при открытии сразу активной была  "Вторая" закладка.

Задача 3. В форме добавьте 2 кнопки "Лево" и  "Право". При щелчке по кнопке текущая закладка (которая выбрана в форме) должна передвинуться на одну позицию влево или вправо.

Задача 4. В форме добавьте 7 флажков, названных днями недели. Форма должна работать просто: если флажок установлен, появляется соответствующая закладка, если флажок снят - закладка пропадает. Условие: закладки называются как дни недели. При этом они должны быть по порядку: "вторник" не может быть слева от "понедельника" - каждая закладка добавляется на свое место, а не справа.

Задача 5.  Возьмите любой документ, содержащий табличную часть. Доработайте его таким образом, чтобы табличная часть была на отдельной закладке (Табличная Часть), все остальные реквизиты - на закладке "Шапка".  Кнопки "Закрыть", "Сохранить", "Печать" - должны присутствовать на обеих закладках.


Только для подписчиков рассылки 1С:Школа мы предлагаем:

  • Для тех, кто совсем слаб в конфигурировании и у кого много вопросов по выходящей рассылке, мы предлагаем сервисную услугу. За небольшую абонентскую плату (5$ в месяц ) Вы получите возможность консультаций с автором рассылки по всем вопросам, которые у Вас возникают. Вопросы могут быть разные: по теории, по решению задач, по применению изученного материала. Условие только одно: задаваемые вопросы  должны относиться к выпуску из того периода за который внесена абонентская плата.  Начать консультации можно по Вашему выбору с любого выпуска, после того как поступила оплата. Длительность консультаций - ровно месяц: начали 23 марта - закончили 22 апреля.
  • Мы предоставляем платные консультации по любым вопросам, касающимся конфигурирования  компоненты бухгалтерский учет.  Вопросы могут быть самые разнообразные постановка задачи, подсказки, советы, поиск оптимальной схемы решения поставленной задачи, поиск "неразрешимых" ошибок в Ваших модулях (тех, что не видно самому автору), написание "каркаса" модулей с объяснением их функционирования. Обращаем Ваше внимание на то, что мы не занимаемся консультациями по постановке учета бухгалтерского учета, по ведению бухгалтерского и налогового учета. Не делаем это в силу того, что по электронной почте тяжело решать такие вопросы. Консультации проходят в рамках месячного абонентского обслуживания по рабочим дням. Время ответа на Ваши запросы - 1 сутки. Консультации проводятся только по рабочим дням.  Очевидно, что вопрос - вопросу рознь, именно по этому мы рассчитываем на то, что средний размер ответа будет составлять не более 1 страницы текста (или модуля).  Абонентская плата составляет 25$ в месяц.    Положитесь на наш опыт и мы поможем Вам осилить автоматизацию Вашей бухгалтерии.
  • Конфигурирование. Если у вас есть документ, отчет с которым Вы не можете справится самостоятельно, то мы можем Вам в этом помочь. От Вас требуется детальное описание того, что Вы хотите получить и  конфигурация на которой это будет выполняться. После согласования сроков, оплаты и других условий мы выполним эту работу быстро и качественно.
Hosted by uCoz