→ Переключатели, обычное приложение, управляемые формы. Переключатели, обычное приложение, управляемые формы Настройка внешнего вида управляемой формы

Переключатели, обычное приложение, управляемые формы. Переключатели, обычное приложение, управляемые формы Настройка внешнего вида управляемой формы

Добавляем на форму рамку группы и на нее размещаем переключатели через пункт меню Форма -> Вставить элемент управления… и в открывшемся окне выбираем переключатели:

В правой части окна добавляем значение переключателя столько, сколько нам необходимо, ставим галочку на «Акции – первый в группе», для того чтоб данный переключатель выбирался автоматически.

После того как добавим переключатели выберем тип данных для первого значения «Акции», в нашем случае присваиваем значение «ТипЦБ»:

А само значение переключателя вводится в Данные -> Выбираемое значение. Для Акции это 0, Облигации – 1, Векселя - 2 и Паи – 3. Но до введения этих данных необходимо проверить порядок.

Если переключатели идут не по порядку, то не будет осуществлено переключение, то есть не сможем выбрать значение облигации. Для того чтобы включить эту возможность, необходимо выбрать меню Форма -> Настройка порядка обхода и все переключатели разместить по порядку.

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

Остается только в событии переключателя «акции» «При изменении» написать код программы:

Если ТипЦБ = 0 Тогда

ИначеЕслиТипЦБ = 1 Тогда

ЭтаФорма.ЭлементыФормы.Поступление.Колонки.НКД.Доступность = 1; // только для облигаций разрешаем НКД

ИначеЕслиТипЦБ = 2 Тогда

ЭтаФорма.ЭлементыФормы.Поступление.Колонки.НКД.Доступность = 0;

ИначеЕслиТипЦБ = 3 Тогда

ЭтаФорма.ЭлементыФормы.Поступление.Колонки.НКД.Доступность = 0;

КонецЕсли;

Теперь при выборе переключателя «Облигации» дается возможность редактировать значение колонки НКД.

1С создаются системой автоматически при использовании прикладного решения. Являются основой представления (отображения) информации в системе "1С:Предприятие".

Структура формы 1С

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

Отображаемая часть формы (видимая пользователю) описывается как дерево, включающее элементы формы (см. рис. ниже, поле "Элементы формы"):

  • группы, включающей другие элементы,
  • поля ввода,
  • флажки,
  • переключатели,
  • кнопки,
  • таблицы, которые включают элементы-колонки и т. д.

"Элементы формы 1С"

[свернуть]

Группа элементов формы может представляться как

  1. панель с рамкой,
  2. панель со страницами (закладками),
  3. собственно страница,
  4. командная панель.

Вся функциональность формы описывается в виде:

  • реквизитов (данных, с которыми работает форма);
  • команд (выполняемых действий).

Настройка внешнего вида управляемой формы

Настройка внешнего вида управляемой формы пользователем

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

"Ещё" - "Изменить форму"

Команда "Ещё" - "Изменить форму":

После нажатия "Изменить форму" показывается окно настройки формы 1С:

[свернуть]

Кроме того, в пользовательском режиме возможно:


  • изменять порядок следования форм, переносить их из одной колонки в другую (если рабочий стол организован в две колонки), однако изменить количество колонок на рабочем столе нельзя;
  • выводить информацию в виде отдельных окон (при вызове навигационной команды нужно удерживать клавишу Shift).

Если используются разделы, то при вызове команды в панели навигации, соответствующий ей список отображается в рабочей области, замещая прежнее содержимое рабочей области.

Настройка внешнего вида управляемой формы разработчиком

Разработчик может влиять на расположение элементов различными установками. Он может определять порядок элементов, указывать их ширину и высоту, а также использовать:

  • команды самой формы;
  • глобальные команды, используемые в всей конфигурации;
  • параметризуемые команды, которые будут открывать другие формы с учетом конкретных данных текущей формы.

Рисунок (изменение формы 1С разработчиком)

[свернуть]

При разработке формы 1С необходимо:

  1. в редакторе формы включить в форму необходимые реквизиты и команды;
  2. создать отображающие их элементы формы, определить порядок элементов, указать ширину и высоту (при необходимости);
  3. скомпоновать элементы в группы (если необходимо).
  1. Использовать ролевую настройку видимости в элементах форм (просмотр и редактирование реквизитов по , пользовательскую видимость полей формы по ролям, использование команд по ролям) в случае большого количества ролей в конфигурации (от нескольких десятков). Вместо этого следует придерживаться следующих подходов:
    • при сильных различиях внешнего вида и функциональности формы в зависимости от наличия тех или иных ролей у пользователя – разрабатывать отдельные формы , специализированные под конкретный набор прав пользователя;
    • при незначительных отличиях – выполнять проверку прав в коде . При этом следует иметь в виду, что программное управление видимостью может снизить скорость открытия формы, что нужно учитывать при выборе между предлагаемыми подходами.
  2. Использовать ролевую настройку видимости в командном интерфейсе конфигурации, командном интерфейсе основного раздела, а также рабочей области начальной страницы. Вместо этого следует использовать настройку прав на разделы командного интерфейса, и объекты, включенные в командный интерфейс или в рабочую область. Это позволяет повысить предсказуемость поведения управляемого интерфейса для пользователя, а также упростить расследование ошибок.

Более подробную информацию по работе с формами в курсе "Работа с формами в "1С:Предприятии 8.3", http://www.1c.ru/rus/partners/training/uc1/course.jsp?id=161.

Клюев В.В.

http://prof1c.kklab.ru

РАБОТА С ПЕРЕКЛЮЧАТЕЛЯМИ

Прошу учесть всех пользователей сервиса сайт - материалы размещаю в разделе Начинающим!!!

8.2 Управляемые формы

Во время изучения поведения управляемых форм перед программистами или разработчиками интерфейсов встаёт вопрос - а где переключатели в управляемых формах и как их добавить на форму. Мелочь, но неприятно много времени тратится на такие мелочи, хотя это время можно было бы потратить на разработку и оптимизацию алгоритма, а не проектирования формы.

Итак, давайте создадим пустую конфигурацию для понимания вопроса, или выберите любую типовую.
Перейдите на группу содержащую справочники, и для эксперимента добавьте новый справочник. Хочу заметить, что конфигурация должна иметь основной режим запуска - Управляемое приложение.

Итак, создадим новый справочник и добавим реквизит «Реквизит1», с типом «Булево»

Теперь перейдем на вкладку Формы и добавим новую форму.

Итак, управляемая форма создана, теперь поработаем с формой и найдем всё таки, где находится переключатель.
Вот наша форма, и на ней мы видим наш реквизит, но в виде флажка

Итак, что же мы сделали не так?
Давайте посмотрим в свойства реквизита, есть ли там переключение на вид элемента управления.
И мы видим, что Поле переключателя здесь нет!(В чем мы ошиблись?

Видимо, что вид элемента управления на форме - зависит от типа данных, вернемся к свойствам формы, а именно к вкладке реквизиты и изменим свойства нашего реквизита -а именно его тип «Булево», на тип «Число».

Теперь вернемся опять к свойствам элемента управления и проверим, добавился ли Вид элемента управления в его свойствах - - - И урра, мы видим там вид - Поле переключателя.

Теперь смотрим на форму, что мы видим:

Мы видим - 3 значения по умолчанию, 3 переключателя, но нам нужно их два, идем опять в свойства реквизита, и смотрим там свойств «Количество колонок»

Для 2 - поставьте Количество колонок - 2.

Это могло бы немного остановить уставшего программиста)), но теперь и он и мы это знаем!

8.2 Обычные формы.

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

Итак, рассмотрим пример. Есть такой документ корректировка поступления в 1С УПП - он точно есть. Нам однажды понадобилось в него добавить переключатели, чтобы рисовались немного разные проводки для бухгалтерского учета. В чем проблема, казалось бы надо значит надо, сделаем. Но в этой форме уже есть 2 переключателя.

Вот так выглядит форма в которую нам нужно приладить еще переключатели


На вкладке дополнительно, мы бы хотели разместить еще два переключателя. Итак первое действие смело добавляем новый элемент управления в необходимо нам место его вставляем.

Казалось бы всё просто. Создаем новый реквизит, с типом - «Число» и вставляем 2 переключателя, один из которых будет иметь возможность записать данные в реквизит, а другой нет.

Добавляем новый элемент управления - Переключатель, в таблице с количеством и описанием переключателей добавляем Переключатель2, устанавливаем Переключатель1 первым в группе и нажимаем ок. Размещаем созданные элементы управления на форме. Обновляем конфигурацию базы данных (F7) и запускаем на отладку.

При выполнении (при создании нового документа в режиме 1С:Предприятие) мы видим, что сколько бы мы ни старались нажать на Переключатель2 - ничего не происходит. Элементы не работают так как им нужно. Тут есть одна фишка.
Вернитесь в конфигуратор. Выберите пункт в меню Форма -> Настройка порядка обхода … (важно чтобы форма была открыта на экране)


Для того, чтобы наши Переключатели заработали, необходимо нарушить автоматический порядок и согласиться на ручной. И в форме поставить так, чтобы наши переключатели шли - один за другим по порядку.

ОК. Обновите конфигурацию и попробуйте запустить на выполнение.
Отлично. Всё заработало.

Дополнительно - видео(без звука, итак все понятно)


1. Поле ввода
2. Флажок
3. Переключатель

Поле ввода

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

Выбор из списка (РежимВыбораИзСписка)

Выбор из другой формы (Кнопка выбора)

Кнопки регулирования

Реализация вышеприведенных примеров не требует значительных усилий со стороны разработчика так. например, для режима списка необходимо заполнить список элемента значениями, для выбора из другой формы достаточно просто связать элемент управления с данными справочника. А вот для кнопок регулирования нужно будет написать побольше кода, по обработке нажатия по каждой кнопке, хотя и он не будет велик:

Процедура пвВыборНоменклатурыРегулирование(Элемент, Направление, СтандартнаяОбработка)
//Выбираем данные для поля ввода
// в данном случае справочник Номенклатура
Запрос = Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| Номенклатура.Ссылка Как Товар
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|УПОРЯДОЧИТЬ ПО
| Номенклатура.Код";
ТЗНоменклатура = Запрос.Выполнить().Выгрузить();

//ищем текущий элемент справочника указанный в поле ввода
ТекЭлемент = ТЗНоменклатура.Найти(Элемент.значение);

Если ТекЭлемент = Неопределено Тогда
// если не нашли элемент тогда устанавливаем номер индекса
// за пределами таблицы значений, т.к. самый первый элемент в
// таблице значений имеет индекс 0
ТекИндекс = -1;
Иначе
// если элемент найден получаем его индекс
ТекИндекс = ТЗНоменклатура.Индекс(ТекЭлемент);
КонецЕсли;

// рассчитываем новый индекс в зависимости от нажатия кнопки
// минус перед переменной Направление стоит для того, чтобы при
// нажатии на верхнюю стрелку показывался элемент стоящий выше
// а следовательно с меньшим индексом
НовИндекс = ТекИндекс-Направление;

// получаем количество элементов в справочнике
// вычетаем единицу т.к. все коллекции в 8.1 начинаются с 0
КоличествоЭлементов = ТЗНоменклатура.Количество()-1;

Если НовИндекс < 0 Или НовИндекс > КоличествоЭлементов Тогда
// если при изменении индекс находится за пределами таблицы значений
// т.е. его номер большего самого большого индекса или меньше 0 то
// не изменяем значение и сообщаем об этом пользователю
Сообщить("Вы достигли предела справочника");
Иначе
// присваеваем новое значение, "Товар" - это название колонки таблицы значений
Элемент.значение = ТЗНоменклатура.Получить(НовИндекс).Товар;
КонецЕсли;

КонецПроцедуры

Флажок

В большинстве программ флажок служит для отображения двух состояний: установлен, снят. В 1с флажок имеет три состояния, в третьем состоянии флажок отображается - как установлен и при этом затенен. Три состояния доступны, только если данные флажка - число, при этом состояния имеют следующие значения:

Переключатель

Переключатель используется для выбора одного значения из небольшого количества возможных (желательно не более пяти) при этом значения не могут сочетаться, Например: подходит для выбора пола человека. Другой пример: допустим, фирма даёт одну из 3-х скидок на товар, при этом скидки не суммируются:

В данном случае удобство использования переключателей может заключаться в том, что каждый из них может иметь какое-то значение, которое устанавливается в свойстве "Выбираемое значение". И тогда "Скидка 5%" может хранить значение 5 или 0,05.

При использовании переключателей важно помнить три вещи:

      У первого переключателя должно стоять свойство "ПервыйВГруппе" (в данном примере это переключатель "Скидка 5%").

      Переключатели, относящиеся по смыслу к одной группе должны в настройке порядка обхода идти подряд, без прерываний другими элементами формы. Порядок обхода задается из меню "Форма -> Настройка порядка обхода", для данного примера это выглядит так:

  1. Тип выбираемого значения устанавливается у переключателя имеющего свойство "ПервыйВГруппе".

Переключатели (они же RadioButtons) в 1С 7.7 реализованы весьма своеобразно. Прежде всего, следует учитывать тот факт, что они всегда образуют группу (в одиночном переключателе нет никакого смысла). В 1С явной связи между элементами группы нет. Выделяется первый элемент в группе, для которого указывается идентификатор (им может быть числовой реквизит объекта метаданных). Принадлежность же прочих переключателей группе определяется порядком обхода.

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

В типовой конфигурации 1С инициализация переключателей реализуется следующим образом: Процедура ВводНового(Копирование) // инициализация прочих реквизитов Валютный = 1; КонецПроцедуры //ВводНового Вроде бы достаточно просто, но если учесть, что на первое место в группе переключателей обычно ставится самое востребованное значение, могли бы инициализацию сделать и на автомате средствами платформы.

На мой взгляд, основной недостаток переключателя заключается в том, что на выходе мы получаем обезличенное числовое значение, в отличии, например от перечислений. К сожалению в 1С 7.7 не существует типового способа представления перечислений переключателями. Но этому есть альтернатива - использование предопределенных переменных (аналогично константам в прочих языках программирования).

Рассмотрим пример использования значения переключателя: Если Валютный = 2 Тогда СчетКассы = СчетПоКоду("50.11"); Иначе СчетКассы = СчетПоКоду("50.1"); КонецЕсли; Для того чтобы понять этот код, необходимо перейти на форму и определить, что реквизит «Валютный» это идентификатор первого элемента в группе переключателей «Касса». Сама группа состоит из 2-х элементов: «рублевая (Кт 50.1)» и «валютная (Кт 50.11)». Только после это становится ясно, что вопреки привычной логике, «Валютный = 2» это признак валютной кассы, а «Валютный = 1 или 0» - рублевой.

Упростить понимание кода можно с помощью определения переменных модуля формы с именами и значениями, соответствующими позициям переключателя. Для данного примера это были бы переменные: Перем кТипКассы_Рублевая, кТипКассы_Валютная;

В блоке инициализации модуля определяем их значения: кТипКассы_Рублевая = 1; кТипКассы_Валютная = 2;

В результате исходный код преобразуется к виду: Если Валютный = кТипКассы_Валютная Тогда СчетКассы = СчетПоКоду("50.11"); ИначеЕсли Валютный = кТипКассы_Рублевая Тогда СчетКассы = СчетПоКоду("50.1"); Иначе Предупреждение("Не указан тип кассы."); КонецЕсли;

В заключение хочу заметить, что на мой взгляд, созданием групп переключателей имеет смысл лишь в том случае, когда в группе не больше 4-х (максимум 5-и) элементов. В противном случае, имеет смысл воспользоваться полем со списком, т.к. оно будет занимать значительно меньше места на форме.

 

 

Это интересно: