Каталог решений - Формы для 1script

Формы для 1script

Формы для 1script

В наличии

В последнее время для задач, связанных с администрированием 1С или расширением возможностей конфигуратора, стал использовать 1script (onescript). Движок оказался очень удобным и приятным, но чего-то не хватало, а именно работы с формами. В ряде скриптов использовать GUI было бы предпочтительней параметров командной строки, тем более если с этим работать конечному пользователю.

Категория:

Описание

Имея некоторый опыт работы с C#, решил написать внешнюю компоненту для 1script, благо базовый пример был. После нескольких часов работы появилась компонента, позволяющая работать с формами и обрабатывать события. API старался сделать максимально приближенным к 1С.

Во время разработки очень порадовала обратная связь с разработчиками onescript, ответы на вопросы получал очень быстро. Библиотечные методы написаны просто и понятно, ряд вопросов решился просмотром исходных кодов и копипастом (перебор элементов формы в цикле ДляКаждого Элемент Из Коллекции Цикл).

Проект выложен на github, там же лежит бинарник, для более быстрого начала использования. Методы компоненты покрыты тестами, которые так же являются и примерами работы с объектами компоненты. За тесты отдельное спасибо artbear, всегда знает в каком направлении правильно пнуть 😀

Основная задача компоненты — простая работа с формами. Позволяет создать большое количество разных элементов форм. Поддерживается обработка событий элементов. Управление свойствами видимости, доступности и другими. Создан единый интерфейс для работы со значениями элементов (через свойство Значение).

Доступны основные элементы формы и события:

Установка

opm install gui 

либо скачать с github https://github.com/ret-Phoenix/oscript-simple-gui

Виды полей

  • ПолеВвода — Однострочное текстовое поле;
  • ПолеИндикатора — Прогрессбар.
  • ПолеКалендаря — Поле для ввода даты
  • ПолеНадписи — Надпись (декорация в терминалогии 1С)
  • ПолеФлажка — Флажок, имеет статусы: Включен/Выключен
  • ПолеТекстовогоДокумента — Многострочный текст
  • ПолеСоСписком — Поле со списком (ComboBox)
  • ПолеСписка — Поле списка (ListBox)
  • ОбычнаяГруппа — Контейнер для группы элементов
  • Страница — Страницы
  • Кнопка
  • ТаблицаФормы — Компонент для отображения объекта ТаблицаЗначений
  • ПредставлениеСписка — ListView для отображения объекта ТаблицаЗначений
  • ДеревоФормы — Компонент для отображения объекта ДеревоЗначений

 

Обрабатываемые события

  • Форма: ПриОткрытии
  • Кнопка: ПриНажатии
  • ПолеФормы: ПриИзменении, ПриВыборе (нажат Enter), ПриНажатииНаКнопку (KeyDown)
  • ПолеСписка: ПриДвойномКлике

Диалоги, уведомления

  • Вопрос
  • Предупреждение
  • Диалог выбора файла
  • Уведомление в трее

Примеры работы с компонентой

Перейдем к работе с компонентой…

Создание формы и вывод надписи

#Использовать gui
Перем Форма;

Процедура ПриСозданииОбъекта()

    УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
    Форма = УправляемыйИнтерфейс.СоздатьФорму();

    //# Устанавливаем обработку события ПриОткрытии
    Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
    Форма.Показать();

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

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
    
    Декорация1 = Форма.Элементы.Добавить("Декорация1", "ПолеФормы", Неопределено);
    Декорация1.Вид = Форма.ВидПоляФормы.ПолеНадписи;
    Декорация1.Заголовок = "Это действительно работает!";
    
    Форма.Высота = 100;

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

Создание формы с кнопкой и обработка события нажатия на кнопку

#Использовать gui

Перем Форма;

Процедура ПриСозданииОбъекта()

    УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
    Форма = УправляемыйИнтерфейс.СоздатьФорму();

    //# Устанавливаем обработку события ПриОткрытии
    Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
    Форма.Показать();

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

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
    
    ПолеВвода1 = Форма.Элементы.Добавить("ПолеВвода1", "ПолеФормы", Неопределено);
    ПолеВвода1.Вид = Форма.ВидПоляФормы.ПолеВвода;
    ПолеВвода1.Заголовок = "Поле ввода";
    ПолеВвода1.Значение = "Значение задано из скрипта";

    Кнопка1 = Форма.Элементы.Добавить("Кнопка1", "КнопкаФормы", Неопределено);
    Кнопка1.Заголовок = "Нажми меня";
    Кнопка1.УстановитьДействие(ЭтотОбъект, "Нажатие", "ПриНажатииНаКнопку1");

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

Процедура ПриНажатииНаКнопку1() Экспорт
    Форма.Элементы.Найти("ПолеВвода1").Значение = "Значение после нажатия на кнопку";
КонецПроцедуры

Перейдем к более сложному примеру, создадим форму с кнопкой, полем ввода.

Пример работы с выпадающим списком
#Использовать gui

Перем Форма;

Процедура ПриСозданииОбъекта()

    УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
    Форма = УправляемыйИнтерфейс.СоздатьФорму();

    //# Устанавливаем обработку события ПриОткрытии
    Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
    Форма.Показать();

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

//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
    
    Данные = Новый Соответствие;
    Данные.Вставить("Один", "1");
    Данные.Вставить("Два", "2");
    Данные.Вставить("Три", "3");

    ПолеСоСписком1 = Форма.Элементы.Добавить("ПолеСоСписком1", "ПолеФормы", Неопределено);
    ПолеСоСписком1.Заголовок = "Поле со списком";
    ПолеСоСписком1.Вид = Форма.ВидПоляФормы.ПолеСоСписком;
    ПолеСоСписком1.СписокВыбора = Данные;
    ПолеСоСписком1.Значение = "3";
    ПолеСоСписком1.УстановитьДействие(ЭтотОбъект, "ПриИзменении", "ПриИзменииЗначения");

    Форма.Высота = 80;

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

Процедура ПриИзменииЗначения() Экспорт
    Сообщить("Новое значение: " +  Форма.Элементы.Найти("ПолеСоСписком1").Значение);
КонецПроцедуры

 

ТаблицаФормы

Функция ПолучитьТЗ()
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Код");
	ТЗ.Колонки.Добавить("Наименование");
	ТЗ.Колонки.Добавить("ДатаРождения");
	
	СтрокаТЗ = ТЗ.Добавить();
	СтрокаТЗ.Код = 1;
	СтрокаТЗ.Наименование = "Вася";
	СтрокаТЗ.ДатаРождения = Дата(2000,2,1);
	
	СтрокаТЗ = ТЗ.Добавить();
	СтрокаТЗ.Код = 2;
	СтрокаТЗ.Наименование = "Коля";
	СтрокаТЗ.ДатаРождения = Дата(2010,5,2);
	
	СтрокаТЗ = ТЗ.Добавить();
	СтрокаТЗ.Код = 3;
	СтрокаТЗ.Наименование = "Саша";
	
	Возврат ТЗ;	
КонецФункции // ПолучитьТЗ()


ПровайдерТЗ = Новый Провайдер;
ПровайдерТЗ.Источник = ПолучитьТЗ();

Поле1 = Форма.Элементы.Добавить("ТаблицаФормы1", "ТаблицаФормы", Неопределено);
Поле1.ПутьКДанным = ПровайдерТЗ;
Поле1.Заголовок = "Провайдер - ТЗ";
Поле1.ПоложениеЗаголовка = УправляемыйИнтерфейс.ПоложениеЗаголовка.Верх;
Поле1.Закрепление = 5;

 

ДеревоФормы

Функция ПолучитьТЗ()

	Дерево = Новый ДеревоЗначений();

    Дерево = Новый ДеревоЗначений();
    Дерево.Колонки.Добавить("Год");
    Дерево.Колонки.Добавить("Месяц");
    Дерево.Колонки.Добавить("День");
    
    СтрокаДереваГод = Дерево.Строки.Добавить();
    СтрокаДереваГод.Год = 2016;

    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Jan";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;

    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Dec";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;

    СтрокаДереваГод = Дерево.Строки.Добавить();
    СтрокаДереваГод.Год = 2017;

    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Feb";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;

    СтрокаДереваМесяц = СтрокаДереваГод.Строки.Добавить();
    СтрокаДереваМесяц.Месяц = "Mar";
    СтрокаДереваМесяц.Год = СтрокаДереваГод.Год;

    СтрокаДереваДень = СтрокаДереваМесяц.Строки.Добавить();
    СтрокаДереваДень.День = "1";
    СтрокаДереваДень.Месяц = "Mar";
    СтрокаДереваДень.Год = СтрокаДереваГод.Год;


	Возврат Дерево;

КонецФункции

ПровайдерТЗ = Новый Провайдер;
ПровайдерТЗ.ИсточникДерево = Данные;

Поле1 = Форма.Элементы.Добавить("ДеревоФормы1", "ДеревоФормы", Неопределено);
Поле1.ПутьКДанным = ПровайдерТЗ;
Поле1.Заголовок = "Провайдер - Дерево значений";
Поле1.ПоложениеЗаголовка = УправляемыйИнтерфейс.ПоложениеЗаголовка.Верх;
Поле1.Закрепление = 5;
Поле1.ТекущаяСтрока = 1;

Процедуры и функции интерактивной работы

УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
Диалоги = УправляемыйИнтерфейс.СтандартныеДиалоги;

Ответ = Диалоги.Вопрос("Тест", РежимДиалогаВопрос.ДаНет, 1, КодВозвратаДиалога.Нет , "Заголовок", КодВозвратаДиалога.Нет);

ТекстПредупреждения = "Текст предупреждения";
Таймаут = 10;
Заголовок = "Заголовок окна";
Диалоги.Предупреждение(ТекстПредупреждения, Таймаут, Заголовок);

Трей = Новый УведомлениеВТрее();
Трей.Заголовок = "Стандартная иконка";
Трей.Текст = "Иконка из ресурсов библиотеки";
Трей.Таймаут = 15;
Трей.Показать();

 

Возможности компоненты

На самом деле возможностей компоненты значильно больше нежели приведено в примерах, ознакомиться с ними можно на странице github.

Классы

УправляемыйИнтерфейс/ManagedInterface

Свойства

  • Версия/Version — Строка — Только чтение — Номер версии;
  • СтильЗакрепления/DockStyle
  • ВидПоляФормы/FormFieldType
  • ВидГруппыФормы/FormGroupType
  • ПоложениеЗаголовка/TitleLocation

Методы

  • СоздатьФорму/CreateForm — Форма — Создать форму (близка к Управляемой форме)

Форма/Form

Свойства

  • ВидПоляФормы/FormFieldType — ВидПоляФормы
  • ВидГруппыФормы/FormGroupType
  • ПоложениеЗаголовка/TitleLocation
  • Заголовок/Caption

Методы

  • Показать/Show
  • ПоказатьНеМодально/ПоказатьНеМодально
  • Элементы/Items
    • Возвращаемое значение
      • Коллекция с ПолеФормы, ГруппаФормы, КнопкаФормы

Элементы/Items

Свойства

Методы

  • Количество/Count — Число — Количество элементов
  • Найти/Find — Найти элемент по имени элемента
    • Параметры
      • ИмяЭлемента — Строка
    • Возвращаемое значение
      • ПолеФормы, ГруппаФормы, КнопкаФормы, Неопределено
  • Удалить — Удалить элемент
    • Параметры
      • ПолеФормы, ГруппаФормы, КнопкаФормы
  • Переместить/Move — Переместить элемент
    • Параметры
      • Элемент — ПолеФормы, ГруппаФормы, КнопкаФормы
      • Родитель — ГруппаФормы, УправляемаяФорма — Новый родитель элемента. Может совпадать со старым.
      • МестоРасположения — ПолеФормы, ГруппаФормы, КнопкаФормы — Элемент, перед которым нужно разместить перемещаемый элемент. Если не задан, то перемещается в конец коллекции.
  • Добавить/Add — Добавить элемент на форму
    • Параметры
      • ИмяЭлемента — Строка — Уникальное имя элемента
      • ТипЭлемента — Строка — Тип элемента (ПолеФормы, ГруппаФормы, КнопкаФормы)
      • Родитель — ГруппаФормы, Неопределено — Родитель для добавляемого элемента. Если не указан, то добавляется на верхний уровень.

КнопкаФормы/FormButton

Свойства

  • Родитель/Parent — ГруппаФормы, УправляемаяФорма — Только чтение — Содержит ссылку на родительский элемент.
  • Имя/Name — Строка — Имя кнопки
  • Видимость/Visible — Булево — Видимость кнопки
  • Доступность/Enabled — Булево — Доступность кнопки
  • Заголовок/Title — Строка — Надпись на кнопке

Методы

  • КнопкаНажатие/ButtonClick — deprecated — Обработчик нажатия на кнопку

    • Параметры

      • Скрипт — Объект — ссылка на скрипт с обработиком события
      • ИмяМетода — Строка — Имя метода обработчика события
      Кнопка1 = ЭлементыФормы.Добавить("Кнопка1", "КнопкаФормы", Неопределено);
      Кнопка1.Заголовок = "Нажми меня";
      Кнопка1.КнопкаНажатие(ЭтотОбъект,"ПриНажатииКнопка1");
      
  • УстановитьДействие/SetAction — Устанавливает обработчик события.

    • Параметры
      • Скрипт — Объект — Ссылка на скрипт с обработчиком события
      • ИмяСобытия — Строка — Имя события. Для кнопки только "Нажатие"
      • ИмяМетода — Строка — Имя метода для обработчика
  • ПолучитьДействие/GetAction — Получает имя установленного обработчика события.
    • Параметры
      • ИмяСобытия — Строка — Имя события. Для кнопки только "Нажатие"

ПолеФормы/FormField

Свойства

  • Значение/Value — Установка и получение значения.
  • Вид/Type — ВидПоляФормы
  • Имя/Name — Строка
  • Видимость/Visible — Булево
  • Доступность/Enabled — Булево
  • Заголовок/Title — Строка
  • ПоложениеЗаголовка/TitleLocation — ПоложениеЗаголовка
  • СписокВыбора/ChoiceList — Соответствие
  • Родитель/Parent — ГруппаФормы, УправляемаяФорма — Только чтение
  • ТолькоПросмотр/ReadOnly — Булево
  • Закрепление/Dock
  • АвтоматическийРазмер/AutoSize
  • Ширина/Width
  • Высота/Height

Методы

  • УстановитьДействие/SetAction — Устанавливает обработчик события.
    • Параметры
      • Скрипт — Объект — Ссылка на скрипт с обработчиком события
      • ИмяСобытия — Строка — Имя события. Для кнопки только "Нажатие"
      • ИмяМетода — Строка — Имя метода для обработчика
  • ПолучитьДействие/GetAction — Получает имя установленного обработчика события.
    • Параметры
      • ИмяСобытия — Строка — Имя события. Для кнопки только "Нажатие"

Обрабатываемые события

  • Форма: ПриОткрытии
  • Кнопка: ПриНажатии
  • ПолеФормы: ПриИзменении, ПриВыборе (нажат Enter)
    • ПолеСписка: ПриДвойномКлике

ВидПоляФормы/FormFieldType

  • ПолеВвода/InputField
  • ПолеИндикатора/ProgressBarField
  • ПолеКалендаря/CalendarField
  • ПолеНадписи/LabelField
  • ПолеФлажка/CheckBoxField
  • ПолеТекстовогоДокумента/TextDocumentField
  • ПолеСоСписком/ComboBox
  • ПолеСписка/ListBox
  • ТаблицаФормы / FormTable
  • ПредставлениеСписка / ListView
  • ДеревоФормы / FormTree

ВидГруппыФормы/FormGroupType

  • ОбычнаяГруппа/UsualGroup
  • Страница/Page
  • Страницы/Pages

ПоложениеЗаголовка

  • Авто/Auto
  • Верх/Top
  • Лево/Left
  • Нет/None
  • Низ/Bottom
  • Право/Right

СтильЗакрепления

  • Нет/None
  • Верх/Top
  • Низ/Bottom
  • Лево/Left
  • Право/Right
  • Заполнение/Fill
has been added to your cart:
Оформление заказа