Формы для 1script

Программирование - Инструментарий

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

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

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

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

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

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

Установка

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
102

См. также

Комментарии
Сортировка: Древо
2. Fragster 825 01.08.16 17:38 Сейчас в теме
ждем кроссплатформенного исполнения
3. ret-Phoenix 331 01.08.16 17:43 Сейчас в теме
(2) Решение уже кроссплатформенно, работу под Linux проверяли. У меня примеры под Windows, т.к. ничего больше не стоит
AntoShiK86; Fragster; +2 Ответить
11. KAV2 09.09.16 17:21 Сейчас в теме
(3) Подскажите пожалуйста, а что необходимо сделать для того, чтобы можно было использовать под Linux? Файл oscript-simple-gui.dll ведь не кросс-платформенный.
12. ret-Phoenix 331 09.09.16 20:26 Сейчас в теме
(11) в gitter ответил на вопрос. Для общественности:
под Linux будет работать под Mono.
Моя либа нормально работает под Linux (проверял @dmpas )
т.е. с точки зрения скриптописателя - разницы нет Windows or Linux
4. gubanoff 44 02.08.16 11:59 Сейчас в теме
Прекрасная работа! На самом деле, это первое, что приходит в голову, после начала работы с onescript - добавить интерактив в виде форм.
5. Alien_job 140 02.08.16 12:07 Сейчас в теме
Что вы подразумеваете под расширением возможностей конфигуратора?
upd: Ой,пропустил http://infostart.ru/public/339035/.
6. brr 174 02.08.16 15:34 Сейчас в теме
7. ret-Phoenix 331 02.08.16 15:37 Сейчас в теме
(6) А если без шуток, в ближайшее время планирую изменить название этого этого класса. Будут доступны оба варианта, ПростойГУЙ будет deprecated
8. artbear 1066 03.08.16 11:08 Сейчас в теме
ПростойГуй звучит, да :)
1cWin; DmitrySinichnikov; +2 Ответить
9. HDRX 23 03.08.16 11:39 Сейчас в теме
Что за шрифт используете в редакторе?
10. ret-Phoenix 331 03.08.16 12:26 Сейчас в теме
(9) Стандартный в VSCode: "editor.fontFamily": "Consolas, 'Courier New', monospace",
13. Darklight 7 25.09.17 13:52 Сейчас в теме
Очень здорово. Но есть предложение по оформлению. Хотелось бы, чтобы стиль отображения формы и элементов управления соответствовал стилю 1С (в идеале чтобы можно было настроить перед открытием формы, например указав нужную редакцию платформы 1С или АВТО - последння, включённая в библиотеку, версия стиля платформы 1С). Неплохо бы и загружать параметры стиля оформления формы из файла и/или из строки.

Ещё одно важное предложение - сделайте загрузку настройки элементов формы из файла и/или строки. В идеале - в формате 1С (причём можно загрузить как формат неуправляемых форм - но это не очень просто, но возможно; так и xml формат управляемых форм - и создать "похожу" расстановку поддерживаемых элементов формы) - вот это действительно круто будет!

И, ещё одно предложение - сделайте несколько встроенных форм - например для диалогов вопроса, предупреждения, ввода/выбора из списка единичного значения, редактирования списка/таблицы/дерева значений. Быстрой регенерации формы, позволяющей ввести набор значений с представлением вида дерева (с иерархие в виде дерева и/или закладок - а на листьях - просто список полей ввода - отображаемых вертикально на форме, с надписями).
14. ret-Phoenix 331 25.09.17 21:04 Сейчас в теме
1. По оформлению - маловероятно что буду делать, но если кто сделает - PR проверю и приму.
2. Загрузка настройки элементов - была идея, но пока не доходят руки.
3. формы диалогов есть, в тестах примеры обращения. Выбор из ТЗ - дело нескольких строк, пример есть. Дерево есть - формируете обычное дерево и указываете как источник.
Автогенерация - 1 функция которая будет принимать тип, имя и еще ряд свойств - можно самим один раз написать и использовать.
Сейчас первоочередная задача - довести список компонентов до уровня 1С, переработать расположение.
15. DmitrySinichnikov 149 20.10.17 15:16 Сейчас в теме
Интересно а почему после компиляции в *.exe форма не открывается? Или открывается на долю секунды и закрывается сразу. Проверял и на ваших примерах и на своем коде.
Хотел небольшую утилиту написать, видимо облом, печалька((
16. ret-Phoenix 331 20.10.17 19:15 Сейчас в теме
(15) Пока движок oscript не умеет корректно работать с ВК. поэтому поставлять пока можно в виде *.os
17. pvlunegov 126 26.10.17 21:34 Сейчас в теме
Прекрасно, все работает, замечательное расширение мегаразработки OneScript.
Меня страстно интересуют следующие вопросы:
1. Есть ли возможность выводить картинки в поля элементов формы
Например, картинки в ТабличноеПоле.

Я пока тестирую вашу работу, не нашел реализации вывода картинок.
Есть ли вообще такая возможность?
18. ret-Phoenix 331 27.10.17 10:48 Сейчас в теме
(17) картинки можно использовать в "ПредставлениеСписка" (иконка в строке), больше ничего с картинками нет, не было необходимости
19. ret-Phoenix 331 27.10.17 10:52 Сейчас в теме
Процедура Тест_Должен_УстановитьВидТаблица() экспорт
	ПолучитьФорму();
	
	ПровайдерТЗ = Новый Провайдер;
	ПровайдерТЗ.Источник = ПолучитьТЗ();
	
	Поле1 = Форма.Элементы.Добавить("ТаблицаФормы1", "ПредставлениеСписка", Неопределено);
	Поле1.Представление = Поле1.ВидыПредставлений.Таблица;
	Поле1.ПутьКДанным = ПровайдерТЗ;
	Поле1.Заголовок = "Провайдер - ТЗ";
	Поле1.ПоложениеЗаголовка = УправляемыйИнтерфейс.ПоложениеЗаголовка.Верх;
	Поле1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Заполнение;
	
	Поле1.ОтображатьСетку = Истина;

	Поле1.КолонкаСИндексомИзображения = 0;

	Изображения = Поле1.МаленькиеИзображения;
	Изображения.Добавить("c:\Users\ushakov\Downloads\gconfeditor.ico");
	Изображения.Добавить("c:\Users\ushakov\Downloads\gconfeditor.ico");
	//Изображения.Добавить("c:\Users\ushakov\Documents\СтрелкаВлево.png");

	Изображения = Поле1.БольшиеИзображения;
	Изображения.Добавить("c:\Users\ushakov\Documents\32.ico");
	Изображения.Добавить("c:\Users\ushakov\Documents\32.ico");
	//Изображения.Добавить("c:\Users\ushakov\Documents\СтрелкаВлево.png");
	
	//
	Строки = Поле1.ВыделенныеСтроки;
	Для каждого Стр Из Строки Цикл
		Сообщить(Стр);
	КонецЦикла;
	
	Ожидаем.Что(Форма.Элементы.Найти("ТаблицаФормы1")).Существует();
	
	Форма.Показать();	
КонецПроцедуры
Показать
20. pvlunegov 126 27.10.17 14:56 Сейчас в теме
Подскажите, картинки нужны для формирования отчетов и вывод в форму.
Как это дело можно организовать?
Формирование отчета в поле табличного документа или таблицу управляемой формы и показ оной
21. ret-Phoenix 331 27.10.17 15:35 Сейчас в теме
(20) Аналога Табличного документа нет, есть только ТабличноеПоле. Как вариант, можно дописать ПолеHTML, пока оно не реализовано.
22. pvlunegov 126 27.10.17 15:43 Сейчас в теме
Я почему заинтересовался вашей разработкой - потому что хотел применить ее для:
1. Создания Win-приложения с формами, минимальной графикой
2. Код в приложении делать на 1с.
3. Минимальная графика должна быть хотя бы в виде отчетов (статических таблиц с картинками или графиками или ....)

Без 3 шага реализовать мало-мальски годное приложение шансов = 0

Согласитесь, что если ваше решение чуток доработать, можно делать полноценные приложения с БД с графикой = конкурент 1с на локальной машине без лицензий.

Я думаю в свободное время засесть за C# покопаться в вашем решении и придумать плагин для использования графики.
Например, вывод картинок в поле HTML - думаю самое простое и быстрое решение.
24. ret-Phoenix 331 27.10.17 15:46 Сейчас в теме
(22) Да, работа с ПолеHTML самое простое, но тоже требует времени, пока у меня его нет, переносить возможности поля совсем по минимуму не особо хочется, а на полноценное время выделить пока не могу.
Диаграммы - тоже хочется. даже знаю какую задачу буду ими решать, опять же - вопрос времени.
Сейчас gui развивается в первую очередь чтобы решать задачи SmartConfigurator.
26. pvlunegov 126 27.10.17 15:53 Сейчас в теме
(24) жалько что столько времени уделяете конкуренту Снегопата.
Не взлетит, по моему мнению.
Снегопат хоть и весь оброс бородой, глючный и некрасивый, но народ к нему привык.

Советую задуматься над моим предложением по доработки графических фишек к OneScript.

К сожалению, сейчас, у меня дикое желание использовать вашу разработку для например игр на 1с.
Но придется привинчивать сторонние плагины C# для реализации графики в формах.

Покопаюсь, поделаю, если получится, отпишусь вам.

Возможно, получится сделать обычный плагин в виде давно известного решения.
29. ret-Phoenix 331 27.10.17 16:08 Сейчас в теме
(26) Вообще-то, мои скрипты появились за много лет до появления снегопата, фактически с них и начались разработки примочек к конфигуратору. Раньше проект не так сильно развивал как сейчас.

Я даже не помню, когда в последний раз использовал снегопат, т.к. мне приходится работать на последних версиях платформы, нужна стабильность и доступность всегда и везде.
pvlunegov; +1 Ответить
30. ret-Phoenix 331 27.10.17 16:11 Сейчас в теме
(26) Нашел когда впервые выложил: http://www.1cpp.ru/forum/YaBB.pl?num=1227553473 (24. Ноября 2008)
pvlunegov; +1 Ответить
23. pvlunegov 126 27.10.17 15:45 Сейчас в теме
После шага 3 можно делать даже развлекательные приложения в виде простых игр (табличных, статичная 2d графика)
С применением управляемых форм можно даже сделать браузерные игры.
Преимущества - внутренний код на 1с - огромное (для меня).

Поэтому шаг 3 нужно ОБЯЗАТЕЛЬНО сделать, это АРХИВАЖНО!
25. pvlunegov 126 27.10.17 15:49 Сейчас в теме
Многие люди не понимают ГИГАНТСКИЙ шаг OneScript в направлении:
1. БЕСПЛАТНОГО приложения для создания полноценных Win-приложений с БД, с графикой и внутренним кодом на русском языке.

Если привинтить графику к тому что есть, то то, что я выше обозначил - свершится.

Уже все готово, кроме графики:
1. Внутренний код на 1с работает, хотя глючит и есть ошибки
2. Вся изюминка C# и ООП в наличии (расширяемость, свои классы и функции, библиотеки)
3. Есть формы, есть подключение к БД, есть работа с сетью, файлами и много чего...

Осталось САМОЕ ГЛАВНОЕ - минимальная графика в формах.

Тогда данный проект превратится в полноценный редактор бизнес-решений
27. pvlunegov 126 27.10.17 15:59 Сейчас в теме
Подскажите, в OneScript есть возможность выполнять C# код из 1с кода?
Что то наподобие
Выполнить("С# код...") ?
НАпример, берем руководство Микрософт по рисованию фигур и всякой мелочи https://msdn.microsoft.com/ru-ru/library/x5wshyk0(v=vs.90).aspx
Создаем библиотеку в виде функций на 1с для рисования фигур, подключаем ее к решению
и начинаем использовать графику в 1с.
Взлетит такое?
28. ret-Phoenix 331 27.10.17 16:04 Сейчас в теме
OneScript не позволяет выполнить код c#, но есть возможность работать с .net сборками. Примеры были на github.
31. iolko 178 25.01.18 12:53 Сейчас в теме
Добрый день!
А можно добавить примеров с предупреждением и диалогом выбора файла.
Не могу найти
33. iolko 178 05.02.18 06:32 Сейчас в теме
(32) Не могу победить ДиалогВыбораФайла... Вот где-то туплю, и не пойму где. Можно тоже пример, для "ОсосбоОдаренных"
34. ret-Phoenix 331 05.02.18 21:55 Сейчас в теме
(33)
#Использовать gui

Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(Режим);
	
ДиалогВыбораФайла.Каталог = "c:\";
Если ДиалогВыбораФайла.Выбрать() Тогда
	Сообщить(ДиалогВыбораФайла.Каталог);
КонецЕсли;
Показать


https://github.com/ret-Phoenix/oscript-simple-gui/blob/master/oscript-component/FileDialog.cs
https://github.com/ret-Phoenix/oscript-simple-gui/blob/master/oscript-component/FileDialogMode.cs
35. bulpi 130 24.02.18 20:43 Сейчас в теме
Автор, Вы бы для новичков добавили буквально абзац с пошаговой инструкцией, что и как делать :
1)Что именно качать и откуда
2)Что делать со скачанным

Потому как примеры Ваши из статьи уже не рабочие, и ничего интуитивно понятного я не увидел в процессе подключения. Пока что-то получилось, 2 часа прошло на ровном месте.
Я, конечно, понимаю, что Вы нам ничем не обязаны. Но досадно, от такой хорошей публикации появляется раздражение из-за мелочей.
37. ret-Phoenix 331 22.07.18 17:29 Сейчас в теме
(35) Приведенные примеры вообще-то работающие. OneScript позволяет по разному работать с плагинами. Насчет обновления материала - согласен, пора бы обновить. На следующей неделе обновлю.
Проблемные мелочи, как правило, связаны с неумением читать документацию ;)
36. meckszp 22.07.18 01:12 Сейчас в теме
Также пробовал подключать библиотеку через opm и через ПодключитьВнешнююКомпоненту, но результата 0.
Скрипты запускаются, но не одна форма так не открылась. Перепробовал все примеры.
Очень жаль, что нет актуального материала по подключению этой компоненты. Версия 1CScript 1.0.20.108, ОС Windows 7 x64 запуск через Notepad++ v7.5.7 с плагином NppExec. Кто сталкивался с данной проблемой, прошу помочь. Заранее спасибо!
38. ret-Phoenix 331 22.07.18 17:34 Сейчас в теме
(36) для помощи/решения проблемы принято выкладывать проблемный код, по Вашему посту понять что не так невозможно.
Сейчас компонент активно используется как раз на вашем окружении. А скрипты вообще нужно запускать отдельно, я не знаю как себя ведет Notepad++.

материал актуален, т.к. описанные методы работали и будут работать. даже при использовании библиотеки gui (#использовать gui) происходит загрузка библиотеки как описано в статье https://github.com/ret-Phoenix/oscript-simple-gui/blob/master/oslib/package-loader.os


Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ)
	
	СтандартнаяОбработка = Ложь;
	ПодключитьВнешнююКомпоненту(ОбъединитьПути(Путь, "bin\oscript-gui.dll"));
	
КонецПроцедуры
39. meckszp 27.07.18 22:19 Сейчас в теме
(38) Спасибо! Проблема решилась после запуска отдельно.
40. ret-Phoenix 331 29.07.18 15:53 Сейчас в теме
(39) для разработки на OneScript смотрите в сторону MS VisualStudio Code, редактор бесплатен и хорошо развивается, много плагинов для разных языков, основное сообщество OneScript сидит именно на нем и развивает только его.
NotePad++ как бы не казался живым, но все же умирает.
Оставьте свое сообщение