Выбор читателей
Популярные статьи
1. Поле ввода
2. Флажок
3. Переключатель
Как правило, поле ввода связано с реквизитом объекта и отражает его данные. Это, пожалуй, один из самых распространенных элементов, он имеет несколько способов выбора значения:
Выбор из списка (РежимВыбораИзСписка)
Выбор из другой формы (Кнопка выбора)
Кнопки регулирования
Реализация вышеприведенных примеров не требует значительных усилий со стороны разработчика так. например, для режима списка необходимо заполнить список элемента значениями, для выбора из другой формы достаточно просто связать элемент управления с данными справочника. А вот для кнопок регулирования нужно будет написать побольше кода, по обработке нажатия по каждой кнопке, хотя и он не будет велик:
Процедура пвВыборНоменклатурыРегулирование(Элемент, Направление, СтандартнаяОбработка)
//Выбираем данные для поля ввода
// в данном случае справочник Номенклатура
Запрос = Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| Номенклатура.Ссылка Как Товар
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|УПОРЯДОЧИТЬ ПО
| Номенклатура.Код";
ТЗНоменклатура = Запрос.Выполнить().Выгрузить();
//ищем текущий элемент справочника указанный в поле ввода
ТекЭлемент = ТЗНоменклатура.Найти(Элемент.значение);
Если ТекЭлемент = Неопределено Тогда
// если не нашли элемент тогда устанавливаем номер индекса
// за пределами таблицы значений, т.к. самый первый элемент в
// таблице значений имеет индекс 0
ТекИндекс = -1;
Иначе
// если элемент найден получаем его индекс
ТекИндекс = ТЗНоменклатура.Индекс(ТекЭлемент);
КонецЕсли;
// рассчитываем новый индекс в зависимости от нажатия кнопки
// минус перед переменной Направление стоит для того, чтобы при
// нажатии на верхнюю стрелку показывался элемент стоящий выше
// а следовательно с меньшим индексом
НовИндекс = ТекИндекс-Направление;
// получаем количество элементов в справочнике
// вычетаем единицу т.к. все коллекции в 8.1 начинаются с 0
КоличествоЭлементов = ТЗНоменклатура.Количество()-1;
Если НовИндекс < 0 Или НовИндекс > КоличествоЭлементов Тогда
// если при изменении индекс находится за пределами таблицы значений
// т.е. его номер большего самого большого индекса или меньше 0 то
// не изменяем значение и сообщаем об этом пользователю
Сообщить("Вы достигли предела справочника");
Иначе
// присваеваем новое значение, "Товар" - это название колонки таблицы значений
Элемент.значение = ТЗНоменклатура.Получить(НовИндекс).Товар;
КонецЕсли;
КонецПроцедуры
В большинстве программ флажок служит для отображения двух состояний: установлен, снят. В 1с флажок имеет три состояния, в третьем состоянии флажок отображается - как установлен и при этом затенен. Три состояния доступны, только если данные флажка - число, при этом состояния имеют следующие значения:
Переключатель используется для выбора одного значения из небольшого количества возможных (желательно не более пяти) при этом значения не могут сочетаться, Например: подходит для выбора пола человека. Другой пример: допустим, фирма даёт одну из 3-х скидок на товар, при этом скидки не суммируются:
В данном случае удобство использования переключателей может заключаться в том, что каждый из них может иметь какое-то значение, которое устанавливается в свойстве "Выбираемое значение". И тогда "Скидка 5%" может хранить значение 5 или 0,05.
При использовании переключателей важно помнить три вещи:
У первого переключателя должно стоять свойство "ПервыйВГруппе" (в данном примере это переключатель "Скидка 5%").
Переключатели, относящиеся по смыслу к одной группе должны в настройке порядка обхода идти подряд, без прерываний другими элементами формы. Порядок обхода задается из меню "Форма -> Настройка порядка обхода", для данного примера это выглядит так:
Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.
Программная модификация формы может потребоваться в нескольких случаях:
В управляемой форме можно программно добавить, изменить и удалить:
Все указанные операции возможны только на сервере.
Программное изменение формы имеет ограничения:
Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды
Добавить(< ИмяКоманды >)
Количество ()
Найти(< ИмяКоманды >)
Удалить(< Команда >)
Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.
В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Команда = Команды. Добавить(«ИсторияИзменений» );
Команда. Действие = ;
Команда. Заголовок = «История изменений…» ;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОтобразитьИсторию(Команда )
// действия команды
КонецПроцедуры
Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .
Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты (< Путь >) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Изменение реквизитов выполняется методом ИзменитьРеквизиты (<ДобавляемыеРеквизиты >, <УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .
Внимание!
Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.
Создадим новый реквизит формы с именем Покупатель:
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты. Добавить(Новый РеквизитФормы («Покупатель», Новый ОписаниеТипов («СправочникСсылка.Контрагенты»), «Клиент»));// Изменения состава реквизитов
);
Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:
Вставить(< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)
Добавить(< Имя>, < ТипЭлемента>, < Родитель >)
Количество ()
Найти(< Имя >)
Переместить(< Элемент>, < Родитель>, < МестоРасположения >)
Удалить(< Элемент >)
Коллекция Элементы доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Вставить() , Добавить () , Переместить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере. Элементами коллекции могут быть:
Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие(< ИмяСобытия>, < Действие >) .
Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.
Добавление команды и связанной с ней кнопки:
// Создание команды
Команда = Команды. Добавить(«ИсторияИзменений» );
Команда. Действие = «Подключаемый_ОтобразитьИсторию» ; // В форме должна быть процедура с указанным наименованием
Команда. Заголовок = «История изменений…» ;
// Создание кнопки и связь ее с командой
Элемент = Элементы. Добавить(«ИсторияИзменений» , Тип(«КнопкаФормы» ));
Элемент.ИмяКоманды = «ИсторияИзменений» ;
Добавление реквизита и связанного с ним поля ввода:
// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты. Добавить (Новый РеквизитФормы («Покупатель» , Новый ОписаниеТипов («СправочникСсылка.Контрагенты» ), «Клиент» ));
// Изменение состава реквизитов
ИзменитьРеквизиты(ДобавляемыеРеквизиты );
// Создание поля ввода и связь с реквизитом
Элемент = Элементы. Добавить(«Покупатель» , Тип(«ПолеФормы» ));
Элемент. Вид = ВидПоляФормы. ПолеВвода;
Элемент. ПутьКДанным = «Покупатель» ;
Назначение элементу формы обработчика события:
ЭлементПокупатель. УстановитьДействие («ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );
&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении (Элемент )
// Действия события
КонецПроцедуры
Внимание!
Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие()
, рекомендуется задавать префикс Подключаемый_.
Внимание!
Скачать обработку с примерами программного поиска и изменения реквизитов, команд и элементов управляемой формы можно .
Клюев В.В.
http://prof1c.kklab.ru
Во время изучения поведения управляемых форм перед программистами или разработчиками интерфейсов встаёт вопрос - а где переключатели в управляемых формах и как их добавить на форму. Мелочь, но неприятно много времени тратится на такие мелочи, хотя это время можно было бы потратить на разработку и оптимизацию алгоритма, а не проектирования формы.
Итак, давайте создадим пустую конфигурацию для понимания вопроса, или выберите любую типовую.
Перейдите на группу содержащую справочники, и для эксперимента добавьте новый справочник. Хочу заметить, что конфигурация должна иметь основной режим запуска - Управляемое приложение.
Итак, создадим новый справочник и добавим реквизит «Реквизит1», с типом «Булево»
Теперь перейдем на вкладку Формы и добавим новую форму.
Итак, управляемая форма создана, теперь поработаем с формой и найдем всё таки, где находится переключатель.
Вот наша форма, и на ней мы видим наш реквизит, но в виде флажка
Итак, что же мы сделали не так?
Давайте посмотрим в свойства реквизита, есть ли там переключение на вид элемента управления.
И мы видим, что Поле переключателя здесь нет!(В чем мы ошиблись?
Видимо, что вид элемента управления на форме - зависит от типа данных, вернемся к свойствам формы, а именно к вкладке реквизиты и изменим свойства нашего реквизита -а именно его тип «Булево», на тип «Число».
Теперь вернемся опять к свойствам элемента управления и проверим, добавился ли Вид элемента управления в его свойствах - - - И урра, мы видим там вид - Поле переключателя.
Теперь смотрим на форму, что мы видим:
Мы видим - 3 значения по умолчанию, 3 переключателя, но нам нужно их два, идем опять в свойства реквизита, и смотрим там свойств «Количество колонок»
Для 2 - поставьте Количество колонок - 2.
Это могло бы немного остановить уставшего программиста)), но теперь и он и мы это знаем!
Занудство с переключателями в обычных формах.
Бывают такие моменты, а они бывают) когда необходимо доработать какую-то уже готовую форму, в которой уже есть какие-то переключатели, и вам необходимо добавить еще переключателю на эту форму. Вот тут и возникает какое-то занудство, которое отнимает много времени, причем времени не на программирование кода - а пустая трата времени с тем, чтобы вывести для пользователя эти переключатели.
Итак, рассмотрим пример. Есть такой документ корректировка поступления в 1С УПП - он точно есть. Нам однажды понадобилось в него добавить переключатели, чтобы рисовались немного разные проводки для бухгалтерского учета. В чем проблема, казалось бы надо значит надо, сделаем. Но в этой форме уже есть 2 переключателя.
Вот так выглядит форма в которую нам нужно приладить еще переключатели
На вкладке дополнительно, мы бы хотели разместить еще два переключателя. Итак первое действие смело добавляем новый элемент управления в необходимо нам место его вставляем.
Казалось бы всё просто. Создаем новый реквизит, с типом - «Число» и вставляем 2 переключателя, один из которых будет иметь возможность записать данные в реквизит, а другой нет.
Добавляем новый элемент управления - Переключатель, в таблице с количеством и описанием переключателей добавляем Переключатель2, устанавливаем Переключатель1 первым в группе и нажимаем ок. Размещаем созданные элементы управления на форме. Обновляем конфигурацию базы данных (F7) и запускаем на отладку.
При выполнении (при создании нового документа в режиме 1С:Предприятие) мы видим, что сколько бы мы ни старались нажать на Переключатель2 - ничего не происходит. Элементы не работают так как им нужно. Тут есть одна фишка.
Вернитесь в конфигуратор. Выберите пункт в меню Форма -> Настройка порядка обхода … (важно чтобы форма была открыта на экране)
Для того, чтобы наши Переключатели заработали, необходимо нарушить автоматический порядок и согласиться на ручной. И в форме поставить так, чтобы наши переключатели шли - один за другим по порядку.
ОК. Обновите конфигурацию и попробуйте запустить на выполнение.
Отлично. Всё заработало.
Дополнительно - видео(без звука, итак все понятно)
1С создаются системой автоматически при использовании прикладного решения. Являются основой представления (отображения) информации в системе "1С:Предприятие".
Форма в представляет собой логическое описание состава формы. элементов описывает то, как будет выглядеть форма. Размещение элементов формы выполняется системой автоматически при её отображении.
Отображаемая часть формы (видимая пользователю) описывается как дерево, включающее элементы формы (см. рис. ниже, поле "Элементы формы"):
"Элементы формы 1С"
[свернуть]
Группа элементов формы может представляться как
Вся функциональность формы описывается в виде:
Настройка внешнего вида управляемой формы может осуществляться на пользовательском уровне. Для данной возможности в действиях формы существует команда "Ещё" - "Изменить форму" (управление только теми элементами формы, которые определены на этапе разработки или по стандартным правилам автогенерации формы).
"Ещё" - "Изменить форму"
Команда "Ещё" - "Изменить форму":
После нажатия "Изменить форму" показывается окно настройки формы 1С:
[свернуть]
Кроме того, в пользовательском режиме возможно:
Если используются разделы, то при вызове команды в панели навигации, соответствующий ей список отображается в рабочей области, замещая прежнее содержимое рабочей области.
Разработчик может влиять на расположение элементов различными установками. Он может определять порядок элементов, указывать их ширину и высоту, а также использовать:
Рисунок (изменение формы 1С разработчиком)
[свернуть]
Более подробную информацию по работе с формами в курсе "Работа с формами в "1С:Предприятии 8.3", http://www.1c.ru/rus/partners/training/uc1/course.jsp?id=161.
Добавляем на форму рамку группы и на нее размещаем переключатели через пункт меню Форма -> Вставить элемент управления… и в открывшемся окне выбираем переключатели:
В правой части окна добавляем значение переключателя столько, сколько нам необходимо, ставим галочку на «Акции – первый в группе», для того чтоб данный переключатель выбирался автоматически.
После того как добавим переключатели выберем тип данных для первого значения «Акции», в нашем случае присваиваем значение «ТипЦБ»:
А само значение переключателя вводится в Данные -> Выбираемое значение. Для Акции это 0, Облигации – 1, Векселя - 2 и Паи – 3. Но до введения этих данных необходимо проверить порядок.
Если переключатели идут не по порядку, то не будет осуществлено переключение, то есть не сможем выбрать значение облигации. Для того чтобы включить эту возможность, необходимо выбрать меню Форма -> Настройка порядка обхода и все переключатели разместить по порядку.
Проверьте значение выбираемого значения переключателей после исправления порядка.
Остается только в событии переключателя «акции» «При изменении» написать код программы:
Если ТипЦБ = 0 Тогда
ИначеЕслиТипЦБ = 1 Тогда
ЭтаФорма.ЭлементыФормы.Поступление.Колонки.НКД.Доступность = 1; // только для облигаций разрешаем НКД
ИначеЕслиТипЦБ = 2 Тогда
ЭтаФорма.ЭлементыФормы.Поступление.Колонки.НКД.Доступность = 0;
ИначеЕслиТипЦБ = 3 Тогда
ЭтаФорма.ЭлементыФормы.Поступление.Колонки.НКД.Доступность = 0;
КонецЕсли;
Теперь при выборе переключателя «Облигации» дается возможность редактировать значение колонки НКД.
Статьи по теме: | |
4 приложения по умолчанию
Став обладателем Windows 10, многие пользователи обратили внимание, что... Как обновить прошивку Xiaomi через OTA обновление
После выхода любой официальной прошивки большинство пользователей... ZTE Blade GF3 - просто хороший бюджетный смартфон
Posted Вс, 02/21/2016 - 20:31 ПО Android Assistant, Link2sd, X-plore,... |