Формы для 1script
Имея некоторый опыт работы с 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
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструментарий разработчика Сервера OneScript Системный администратор Разработчик 1С 8.3 Россия Бесплатно (free)
Библиотека для создания многопоточного TCP-сервера, а так же TCP-клиента с поддержкой SSL/TLS шифрования для экосистемы OneScript. Удобный инструмент для построения распределенных систем, высоконагруженных сервисов, систем реального времени. С низким порогом вхождения и подробной документацией с примерами.
12.01.2026 3511 ahyahy 2
Инструментарий разработчика OneScript Работа с интерфейсом Разработчик Россия Бесплатно (free)
Представляю кроссплатформенную библиотеку для разработки приложений с текстовым пользовательским интерфейсом (TUI) для сценарного языка OneScript. Она использует модель программирования, похожую на классические Desktop GUI (например, WinForms или WPF), но целиком работает в текстовом режиме. Возможно это ностальгия по DOS временам, но в наше время это так же и повышенная скорость отрисовки интерфейса, и легкость в написании скрипта. Создавайте интуитивно понятные окна, кнопки, поля ввода и выпадающие списки. Благодаря OneScript инструмент будет доступен даже новичкам без долгого обучения.
14.11.2025 5306 ahyahy 12
OneScript Мессенджеры и боты Разработчик Бесплатно (free)
Создаём Telegram-бота для декомпиляции 1С файлов на OneScript и фреймворке Осень. Разберём архитектуру MVC для Telegram-бота. Научимся работать с фреймворком Осень: внедрение зависимостей, аннотации, логирование. Реализуем разбор бинарных файлов (EPF, ERT, CF, CFE.). Упакуем бота в Docker-контейнер
21.08.2025 5911 untru 16
DevOps и автоматизация разработки OneScript Разработчик Бесплатно (free)
Когда в компании используется более 500 внешних обработок для 20 различных баз, процесс их параллельной разработки превращается в борьбу. Расскажем о тернистом пути от ручных скриптов к масштабируемой DevOps-системе, позволяющей централизованно управлять внешними обработками, автоматизировать сборки, интегрироваться с таск-трекером, запускать автотесты и разворачивать окружение в пару кликов.
12.08.2025 10017 untru 13
OneScript Разработчик 1С:Предприятие 8 Бесплатно (free)
В 2024 году главному инструменту DevOps в 1С исполнилось 10 лет. Расскажем о том, что представляет собой экосистема 1Script в 2024 году и почему её важно включить в свой рабочий процесс.
16.06.2025 9846 Evil Beaver 43
Групповая разработка (Git, хранилище) EDT OneScript Разработчик 1С:Предприятие 8 Бесплатно (free)
В данной публикации рассматривается пример реализации скрипта, который автоматизирует получение ветки из GIT репозитория и обновление конфигурации, если разработка проекта ведется в EDT.
11.06.2025 8542 AlexF1 4
WEB-интеграция OneScript Разработчик Стажер Бесплатно (free)
Библиотека для работы с базами MySQL на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!
08.04.2025 7392 bayselonarrend 27
Внешние источники данных OneScript Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Библиотека для работы с базами PostgreSQL на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!
20.02.2025 10251 bayselonarrend 30
под Linux будет работать под Mono.
Моя либа нормально работает под Linux (проверял @dmpas )
т.е. с точки зрения скриптописателя - разницы нет Windows or Linux
Ещё одно важное предложение - сделайте загрузку настройки элементов формы из файла и/или строки. В идеале - в формате 1С (причём можно загрузить как формат неуправляемых форм - но это не очень просто, но возможно; так и xml формат управляемых форм - и создать "похожу" расстановку поддерживаемых элементов формы) - вот это действительно круто будет!
И, ещё одно предложение - сделайте несколько встроенных форм - например для диалогов вопроса, предупреждения, ввода/выбора из списка единичного значения, редактирования списка/таблицы/дерева значений. Быстрой регенерации формы, позволяющей ввести набор значений с представлением вида дерева (с иерархие в виде дерева и/или закладок - а на листьях - просто список полей ввода - отображаемых вертикально на форме, с надписями).
2. Загрузка настройки элементов - была идея, но пока не доходят руки.
3. формы диалогов есть, в тестах примеры обращения. Выбор из ТЗ - дело нескольких строк, пример есть. Дерево есть - формируете обычное дерево и указываете как источник.
Автогенерация - 1 функция которая будет принимать тип, имя и еще ряд свойств - можно самим один раз написать и использовать.
Сейчас первоочередная задача - довести список компонентов до уровня 1С, переработать расположение.
Хотел небольшую утилиту написать, видимо облом, печалька((
Меня страстно интересуют следующие вопросы:
1. Есть ли возможность выводить картинки в поля элементов формы
Например, картинки в ТабличноеПоле.
Я пока тестирую вашу работу, не нашел реализации вывода картинок.
Есть ли вообще такая возможность?
Процедура Тест_Должен_УстановитьВидТаблица() экспорт
ПолучитьФорму();
ПровайдерТЗ = Новый Провайдер;
ПровайдерТЗ.Источник = ПолучитьТЗ();
Поле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")).Существует();
Форма.Показать();
КонецПроцедуры Показать1. Создания Win-приложения с формами, минимальной графикой
2. Код в приложении делать на 1с.
3. Минимальная графика должна быть хотя бы в виде отчетов (статических таблиц с картинками или графиками или ....)
Без 3 шага реализовать мало-мальски годное приложение шансов = 0
Согласитесь, что если ваше решение чуток доработать, можно делать полноценные приложения с БД с графикой = конкурент 1с на локальной машине без лицензий.
Я думаю в свободное время засесть за C# покопаться в вашем решении и придумать плагин для использования графики.
Например, вывод картинок в поле HTML - думаю самое простое и быстрое решение.
Диаграммы - тоже хочется. даже знаю какую задачу буду ими решать, опять же - вопрос времени.
Сейчас gui развивается в первую очередь чтобы решать задачи .
Не взлетит, по моему мнению.
Снегопат хоть и весь оброс бородой, глючный и некрасивый, но народ к нему привык.
Советую задуматься над моим предложением по доработки графических фишек к OneScript.
К сожалению, сейчас, у меня дикое желание использовать вашу разработку для например игр на 1с.
Но придется привинчивать сторонние плагины C# для реализации графики в формах.
Покопаюсь, поделаю, если получится, отпишусь вам.
Возможно, получится сделать обычный плагин в виде давно известного решения.
Я даже не помню, когда в последний раз использовал снегопат, т.к. мне приходится работать на последних версиях платформы, нужна стабильность и доступность всегда и везде.
С применением управляемых форм можно даже сделать браузерные игры.
Преимущества - внутренний код на 1с - огромное (для меня).
Поэтому шаг 3 нужно ОБЯЗАТЕЛЬНО сделать, это АРХИВАЖНО!
1. БЕСПЛАТНОГО приложения для создания полноценных Win-приложений с БД, с графикой и внутренним кодом на русском языке.
Если привинтить графику к тому что есть, то то, что я выше обозначил - свершится.
Уже все готово, кроме графики:
1. Внутренний код на 1с работает, хотя глючит и есть ошибки
2. Вся изюминка C# и ООП в наличии (расширяемость, свои классы и функции, библиотеки)
3. Есть формы, есть подключение к БД, есть работа с сетью, файлами и много чего...
Осталось САМОЕ ГЛАВНОЕ - минимальная графика в формах.
Тогда данный проект превратится в полноценный редактор бизнес-решений
Что то наподобие
Выполнить("С# код...") ?
НАпример, берем руководство Микрософт по рисованию фигур и всякой мелочи
Создаем библиотеку в виде функций на 1с для рисования фигур, подключаем ее к решению
и начинаем использовать графику в 1с.
Взлетит такое?
#Использовать gui
Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогВыбораФайла.Каталог = "c:\";
Если ДиалогВыбораФайла.Выбрать() Тогда
Сообщить(ДиалогВыбораФайла.Каталог);
КонецЕсли;
Показать1)Что именно качать и откуда
2)Что делать со скачанным
Потому как примеры Ваши из статьи уже не рабочие, и ничего интуитивно понятного я не увидел в процессе подключения. Пока что-то получилось, 2 часа прошло на ровном месте.
Я, конечно, понимаю, что Вы нам ничем не обязаны. Но досадно, от такой хорошей публикации появляется раздражение из-за мелочей.
Проблемные мелочи, как правило, связаны с неумением читать документацию ;)
Скрипты запускаются, но не одна форма так не открылась. Перепробовал все примеры.
Очень жаль, что нет актуального материала по подключению этой компоненты. Версия 1CScript 1.0.20.108, ОС Windows 7 x64 запуск через Notepad++ v7.5.7 с плагином NppExec. Кто сталкивался с данной проблемой, прошу помочь. Заранее спасибо!
Сейчас компонент активно используется как раз на вашем окружении. А скрипты вообще нужно запускать отдельно, я не знаю как себя ведет Notepad++.
материал актуален, т.к. описанные методы работали и будут работать. даже при использовании библиотеки gui (#использовать gui) происходит загрузка библиотеки как описано в статье
Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ)
СтандартнаяОбработка = Ложь;
ПодключитьВнешнююКомпоненту(ОбъединитьПути(Путь, "bin\oscript-gui.dll"));
КонецПроцедурыNotePad++ как бы не казался живым, но все же умирает.
Переходите на нормальный редактор - visual studio code
vscode не требует админских прав. Жду свой комп и будет стоять vscode
Можно пару вопросов по Вашей библиотеке: Каким образом правильно работать с выводимой таблицей значений? В частности я пробовал задать заголовок у объекта ТЗ (который провайдер данных) вот так:
ТЗ.Колонки.Добавить("Блокировка", Новый ОписаниеТипов("Булево"), "Блок");
но у ТЗ на форме выводится заголовок "Блокировка" - я правильно понимаю, что надо как-то обращаться к Элементы.Найти() и потом с ним работать?
Также хотелось бы узнать, будет ли у ТЗ на форме работать отображение флажка и что для этого надо сделать?
Если нужен флажок - "представление списка" позволяет выводить флажки.
Дока по Табличному полю
Примеры здесь:
а можно и так глянуть:
Также заметил интересный момент (так задумано?):
создаю группу, в ней - кнопку, вот так:
ГруппаКнопки = Форма.Элементы.Добавить("ГруппаКнопки", "ГруппаФормы", Неопределено);
ГруппаКнопки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Кнопка1 = Форма.Элементы.Добавить("КнопкаОбновить", "КнопкаФормы", ГруппаКнопки);
Кнопка1.Заголовок = "Обновить";
Кнопка1.УстановитьДействие(ЭтотОбъект, "Нажатие", "ПриНажатииКнопкаОбновить");
Кнопка1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
Показатьи кнопка не становится элементом формы.
То есть вот так кнопка не находится:
ТекЭлем = Форма.Элементы.Найти("КнопкаОбновить");
А вот так - находится:
ГруппаКнопки = Форма.Элементы.Найти("ГруппаКнопки");
ТекЭлем = ГруппаКнопки.Элементы.Найти("КнопкаОбновить");
Если у контрола не указать Закрепление - используется вариант TOP
По поводу закрепления - я пытаюсь вывести на форму ТЗ и под ней - многострочный текст. ТЗ должна занимать всё свободное место, а лог - прямо под ней. Скажите пожалуйста - как это сделать? Делаю вот так:
Поле1 = ЭлементыФормы.Добавить("Базы", "ТаблицаФормы", Неопределено);
Поле1.ПутьКДанным = ПровайдерТЗ;
Поле1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Заполнение;
ПолеЛог = ЭлементыФормы.Добавить("Лог", "ПолеФормы", Неопределено);
ПолеЛог.Заголовок = "Лог";
ПолеЛог.Вид = ВидыПоляФормы.ПолеТекстовогоДокумента;
ПолеЛог.ПоложениеЗаголовка = ПоложениеЗаголовка.Низ;
ПоказатьПолучается см. скриншот
#Использовать gui
Функция ПолучитьТЗ()
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Код");
ТЗ.Колонки.Добавить("Наименование");
ТЗ.Колонки.Добавить("ДатаРождения");
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Код = 1;
СтрокаТЗ.Наименование = "Вася";
СтрокаТЗ.ДатаРождения = Дата(2000,2,1);
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Код = 2;
СтрокаТЗ.Наименование = "Коля";
СтрокаТЗ.ДатаРождения = Дата(2010,5,2);
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Код = 3;
СтрокаТЗ.Наименование = "Саша";
Возврат ТЗ;
КонецФункции // ПолучитьТЗ()
УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
Форма = УправляемыйИнтерфейс.СоздатьФорму();
ЭлементыФормы = Форма.Элементы;
ВидыПоляФормы = Форма.ВидПоляФормы;
ПоложениеЗаголовка = Форма.ПоложениеЗаголовка;
ВидГруппыФормы = Форма.ВидГруппыФормы;
Группа1 = ЭлементыФормы.Добавить("ОбычнаяГруппа1", "ГруппаФормы", Неопределено);
Группа1.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа1.Заголовок = "Группа1";
Группа1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Заполнение;
ПровайдерТЗ = Новый Провайдер;
ПровайдерТЗ.Источник = ПолучитьТЗ();
Поле1 = ЭлементыФормы.Добавить("Базы", "ТаблицаФормы", Группа1);
Поле1.ПутьКДанным = ПровайдерТЗ;
Поле1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Заполнение;
Поле1.ПоложениеЗаголовка = ПоложениеЗаголовка.Нет;
Группа2 = ЭлементыФормы.Добавить("ОбычнаяГруппа2", "ГруппаФормы", Неопределено);
Группа2.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа2.Заголовок = "Группа2";
Группа2.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Низ;
ПолеЛог = ЭлементыФормы.Добавить("ПолеЛог", "ПолеФормы", Группа2);
ПолеЛог.Заголовок = "ПолеТекстовогоДокумента";
ПолеЛог.Вид = ВидыПоляФормы.ПолеТекстовогоДокумента;
ПолеЛог.ПоложениеЗаголовка = ПоложениеЗаголовка.Нет;
Группа3 = ЭлементыФормы.Добавить("ОбычнаяГруппа3", "ГруппаФормы", Неопределено);
Группа3.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа3.Заголовок = "Группа1";
Группа3.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Низ;
ПредставлениеСписка = Форма.Элементы.Добавить("ПредставлениеСписка", "ПредставлениеСписка", Группа3);
ПредставлениеСписка.ПутьКДанным = ПровайдерТЗ;
ПредставлениеСписка.Заголовок = "Провайдер - ТЗ";
ПредставлениеСписка.ПоложениеЗаголовка = УправляемыйИнтерфейс.ПоложениеЗаголовка.Верх;
ПредставлениеСписка.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Заполнение;
ПредставлениеСписка.ВыделятьВсюСтроку = Истина;
ПредставлениеСписка.МножественноеВыделение = Истина;
Форма.Показать();
ПоказатьДля лучшего понимания работы форм - запустите студию, создайте форму и попробуйте руками, через свойство закрепление (Dock) получить нужный результат.
Понимаю, что в 1С это сделано проще, я старался сделать как можно ближе к 1С, но очень сильно бороться с .net поведением, если оно не сходится с 1С не стал.
/// <summary>
/// Номер колонки с индексом изображения. Если ничего не задано - 0
/// </summary>
[ContextProperty("КолонкаСИндексомИзображения")]
Поэтому 1 колонкой должно быть число, если получится выделить время на выходных - исправлю.
Данные = Новый Соответствие;
Данные.Вставить("Один", "1");
Данные.Вставить("Два", "2");
Данные.Вставить("Три", "3");
ПолеСоСписком1 = ЭлементыФормы.Добавить("ПолеСоСписком1 ", "ПолеФормы", Неопределено);
ПолеСоСписком1.Заголовок = "Кластер:";
ПолеСоСписком1.Вид = ВидыПоляФормы.ПолеСоСписком;
ПолеСоСписком1.СписокВыбора = Данные;
ПолеСоСписком1.Значение = "3"; ПоказатьУстановленное значение ( "3" ) - не отображается на форме и если позже обратиться к полю формы и попытаться получить его значение: получим ошибку "Object reference not set to an instance of an object" - ПолеСоСписком1.Значение
p.s. Также не работает установка свойства Ширина у ПолеФормы если тип - ПолеВвода или ПолеСоСписком
Данные = Новый Соответствие;
Данные.Вставить(1, "Один");
Данные.Вставить(2, "Два");
Данные.Вставить(3. "Три");
Насчет Ширины, повторюсь, по умолчанию стоит закрепление вверх, в таком случае указание ширины - не имеет смысла, закрепление перебивает его.
Также не совсем работает логика расположения в группе:
Форма.Ширина = 1024;
Форма.Высота = 500;
Форма.Заголовок = "Управление базами";
ВидыПоляФормы = Форма.ВидПоляФормы;
ПоложениеЗаголовка = Форма.ПоложениеЗаголовка;
ВидГруппыФормы = Форма.ВидГруппыФормы;
ЭлементыФормы = Форма.Элементы;
УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
ГруппаКнопки = ЭлементыФормы.Добавить("ГруппаКнопки", "ГруппаФормы", Неопределено);
ГруппаКнопки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Кнопка1 = ЭлементыФормы.Добавить("КнопкаОбновить", "КнопкаФормы", ГруппаКнопки);
Кнопка1.Заголовок = "Обновить";
Кнопка1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
Кнопка1.УстановитьДействие(ЭтотОбъект, "Нажатие", "ПриНажатииКнопкаОбновить");
ТекстовоеПоле1 = ЭлементыФормы.Добавить("КолвоБаз", "ПолеФормы", ГруппаКнопки);
ТекстовоеПоле1.Заголовок = "Кол-во:";
ТекстовоеПоле1.Вид = ВидыПоляФормы.ПолеВвода;
ТекстовоеПоле1.Доступность = Ложь;
ТекстовоеПоле1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
ПолеФлажок = ЭлементыФормы.Добавить("ОтборТолькоБлок", "ПолеФормы", ГруппаКнопки);
ПолеФлажок.Вид = ВидыПоляФормы.ПолеФлажка;
ПолеФлажок.Заголовок = "Блокировка";
ПолеФлажок.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
ПолеФлажок = ЭлементыФормы.Добавить("ОтборТолькоБлокРегЗад", "ПолеФормы", ГруппаКнопки);
ПолеФлажок.Вид = ВидыПоляФормы.ПолеФлажка;
ПолеФлажок.Заголовок = "Блокировка рег.зад";
ПолеФлажок.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
Данные = Новый Соответствие;
Данные.Вставить("" , "Вручную");
Данные.Вставить("test-srv-1c" , "test-srv-1c" );
Данные.Вставить("srv-1c" , "srv-1c" );
Данные.Вставить("srv-1c-supera", "srv-1c-supera" );
Данные.Вставить("blade-1" , "blade-1" );
ПолеСоСписком1 = ЭлементыФормы.Добавить("Кластер", "ПолеФормы", ГруппаКнопки);
ПолеСоСписком1.Заголовок = "Кластер:";
ПолеСоСписком1.Вид = ВидыПоляФормы.ПолеСоСписком;
// СТОИТ ВКЛЮЧИТЬ СЛЕД.СТРОКУ, КАК ПОЛЕ СКРОЕТСЯ ПОД СЛЕДУЮЩИМ ПРОГРЕССБАРОМ
//ПолеСоСписком1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
ПолеСоСписком1.СписокВыбора = Данные;
ПолеСоСписком1.Значение = "test-srv-1c";
// ЭТО ТЕКСТОВОЕ ПОЛЕ НЕ ВЫВОДИТСЯ СПРАВА ОТ СПИСКА, А ЕСЛИ ПОД НИМ - ФЛАЖКИ СЛЕВА СБИВАЮТСЯ ПО ВЫСОТЕ
//ТекстовоеПоле1 = ЭлементыФормы.Добавить("КластерВручную", "ПолеФормы", ГруппаКнопки);
//ТекстовоеПоле1.Заголовок = "Вручную:";
//ТекстовоеПоле1.Вид = ВидыПоляФормы.ПолеВвода;
//ТекстовоеПоле1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево;
ПрогрессБар = ЭлементыФормы.Добавить("ИндикаторОбновленияСпискаБаз", "ПолеФормы", Неопределено);
ПрогрессБар.Вид = ВидыПоляФормы.ПолеИндикатора;
ПрогрессБар.ПоложениеЗаголовка = ПоложениеЗаголовка.Нет; Показать
ГруппаКнопки = ЭлементыФормы.Добавить("ГруппаКнопки", "ГруппаФормы", Неопределено);
ГруппаКнопки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
// добавим 2 строки, уберем комментарии там где не работало и получим счастье
ГруппаКнопки.АвтоматическийРазмер = Ложь;
ГруппаКнопки.Высота = 50;
Новый вопрос: Создал поле со списком, всё прекрасно работает, но если в него ввести своё (произвольное) значение, начинает ругаться на:
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\OneScript\lib\BaseManagement\УправлениеБазами.os / Ошибка в строке: 31 / Внешнее исключение (System.NullReferenceException): Object reference not set to an instance of an object.}
Возврат Сервер.Значение;
Сам объект Сервер при этом сохраняет тип значения ПолеФормы.
Процедура ПриОткрытииФормы() Экспорт
Данные = Новый Соответствие;
Данные.Вставить(0, "0");
Данные.Вставить(1, "1");
Данные.Вставить(2, "2");
Данные1 = Новый Соответствие;
Для Сч=0 По 2 Цикл
Данные1.Вставить(Сч, Строка(Сч));
КонецЦикла;
ПолеСоСписком1 = Форма.Элементы.Добавить("ПолеСоСписком1", "ПолеФормы", Неопределено);
ПолеСоСписком1.Заголовок = "Поле со списком";
ПолеСоСписком1.Вид = Форма.ВидПоляФормы.ПолеСоСписком;
//ПолеСоСписком1.СписокВыбора = Данные; // так Работает
ПолеСоСписком1.СписокВыбора = Данные1; // а так НЕ работает (значение в списке Не устанавливается)
ПолеСоСписком1.Значение = 2; // ! причем значения 0 и 1 работают, а 2 и далее - нет?!
ПолеСоСписком1.УстановитьДействие(ЭтотОбъект, "ПриИзменении", "ПриИзменииЗначения");
Форма.Высота = 80;
КонецПроцедуры ПоказатьИ далее при интерактивной установке Значения=2 вылетает ошибка "Ссылка на объект не указывает на экземпляр объекта" при обращении
Форма.Элементы.Найти("ПолеСоСписком1").ЗначениеВ представлении списка флажок - это 0 колонка, в понимании .net, пока не смотрел что там не так.
ГруппаУпр = ЭлементыФормы.Добавить("ГруппаУпр", "ГруппаФормы", Неопределено);
ГруппаУпр.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаУпр.АвтоматическийРазмер = Ложь;
ГруппаУпр.Высота = 42;
Декорация1 = Форма.Элементы.Добавить("ПодписьГруппДейств", "ПолеФормы", ГруппаУпр);
Декорация1.Вид = Форма.ВидПоляФормы.ПолеНадписи;
Декорация1.Закрепление = УправляемыйИнтерфейс.СтильЗакрепления.Лево; //это не помогло
Декорация1.АвтоматическийРазмер = Ложь; //и это не помогло
Декорация1.Ширина = 10;
Декорация1.Заголовок = "Действия с выделенными базами:";
после чего ВыделенныеСтроки слетают...
Сам пока не знаю когда смогу посмотреть. В первую очередь буду исправлять баги. В свободное время в приоритете SmartConfigurator2.
И еще я заметил что если на форме запустить длительное выполнение, то в случае переключения на другую программу и назад - окно замерзает (freeze) и
перестает себя перерисовывать, а в заголовке формы появляется Not Responding.
P.S. А будет ли у поля формы работать ToolTip?
freeze - это уже операционка +.net
ToolTip - планировалось, даже набросок был сделан, пока не включено в релиз, надо проверять.
Подскажите пжлст, запускаю форму, как обычно. Мне надо вручную, мышкой ширину менять . Как это сделать?
Или, при запуске устанавливаю ширину 600. Эта ширина - фиксированная Как сделать "резиновую", растягивающуюся форму? Какое свойство, как установить?
//ЭтаФорма.СостояниеОкна = "Обычное";
//ЭтаФорма.СтартоваяПозиция = "ЦентрЭкрана";
ЭтаФорма.Ширина = 600;
// Какое свойство устанавливает ВОЗМОЖНОСТЬ РУЧНОГО ИЗМЕНЕНИЯ окна МЫШЬЮ ??
#Использовать gui
#Использовать ParserFileV8i
Перем Парсер;
Перем Форма;
Процедура Инициализация()
УправляемыйИнтерфейс = Новый УправляемыйИнтерфейс();
Форма = УправляемыйИнтерфейс.СоздатьФорму();
//# Устанавливаем обработку события ПриОткрытии
Форма.УстановитьДействие(ЭтотОбъект, "ПриОткрытии", "ПриОткрытииФормы");
Форма.Показать();
КонецПроцедуры
//# Обработка события первого открытия формы
Процедура ПриОткрытииФормы() Экспорт
ЭлементыФормы = Форма.Элементы;
ВидГруппыФормы = Форма.ВидГруппыФормы;
ВидПоляФормы = Форма.ВидПоляФормы;
//Группа страниц
ГруппаСтраницы = ЭлементыФормы.Добавить("ГруппаСтраницы","ГруппаФормы", Неопределено);
ГруппаСтраницы.Вид = ВидГруппыФормы.Страницы;
//Страница полная очистка
СтраницаПолнаяОчистка = ЭлементыФормы.Добавить("СтраницаПолнаяОчистка","ГруппаФормы",ГруппаСтраницы);
СтраницаПолнаяОчистка.Вид = ВидГруппыФормы.Страница;
СтраницаПолнаяОчистка.Заголовок = "Очистить весь кеш";
//Кнопка полной очистики
КнопкаПолнаяОчистка = ЭлементыФормы.Добавить("КнопкаПолнаяОчистка", "КнопкаФормы", СтраницаПолнаяОчистка);
КнопкаПолнаяОчистка.Заголовок = "Очистить кеш";
КнопкаПолнаяОчистка.УстановитьДействие(ЭтотОбъект, "Нажатие", "ОчиститьВесьКеш");
//Страница выборочная очистка
СтраницаВыборочнаяОчистка = ЭлементыФормы.Добавить("СтраницаВыборочнаяОчистка","ГруппаФормы",ГруппаСтраницы);
СтраницаВыборочнаяОчистка.Вид = ВидГруппыФормы.Страница;
СтраницаВыборочнаяОчистка.Заголовок = "Очистить кеш выбранной базы";
//ПолеВыбораБазы
Данные = Новый Соответствие();
Парсер = Новый ПарсерСпискаБаз;
Парсер.УстановитьФайл();
СписокБаз = Парсер.ПолучитьСписокБаз();
Для Каждого База из СписокБаз Цикл
СтруктураАдреса = База.Значение;
Данные.Вставить(СтруктураАдреса.Name,СтруктураАдреса.Name);
КонецЦикла;
ПолеСписокБаз = ЭлементыФормы.Добавить("ПолеСписокБаз","ПолеФормы",СтраницаВыборочнаяОчистка);
ПолеСписокБаз.Вид = ВидПоляФормы.ПолеСоСписком;
ПолеСписокБаз.Заголовок = "Базы:";
ПолеСписокБаз.СписокВыбора = Данные;
ПолеСписокБаз.УстановитьДействие(ЭтотОбъект, "ПриИзменении", "ПриИзменииЗначения");
//Кнопка выборочной очистики
КнопкаВыборочнаяОчистка = ЭлементыФормы.Добавить("КнопкаВыборочнаяОчистка", "КнопкаФормы", СтраницаВыборочнаяОчистка);
КнопкаВыборочнаяОчистка.Заголовок = "Очистить кеш выбранной базы";
КнопкаВыборочнаяОчистка.УстановитьДействие(ЭтотОбъект, "Нажатие", "ВыборочнаяОчисткаКеша");
Форма.Высота = 130;
КонецПроцедуры
Процедура ОчиститьВесьКеш() Экспорт
Чистильщик = Новый ОчисткаКеша();
Чистильщик.УстановитьПарсер(Парсер);
Чистильщик.ОчиститьВесьКеш();
КонецПроцедуры
Процедура ВыборочнаяОчисткаКеша() Экспорт
ВыбраннаяБаза = Форма.Элементы.Найти("ПолеСписокБаз").Значение;
Результат = Парсер.НайтиПоИмени(ВыбраннаяБаза);
Если Результат = Неопределено Тогда
Сообщить("Не найдена база с именем: " + ВыбраннаяБаза);
Иначе
Сообщить("Кеш для базы очищен. " + ВыбраннаяБаза);
Чистильщик = Новый ОчисткаКеша();
Чистильщик.УстановитьПарсер(Парсер);
Чистильщик.ОчиститьКеш(Результат);
КонецЕсли;
КонецПроцедуры
Процедура ПриИзменииЗначения() Экспорт
//Сообщить("Новое значение: " + Форма.Элементы.Найти("ПолеСписокБаз").Значение);
КонецПроцедуры
Инициализация();
ПоказатьЕсли не хочется заморачиваться с поиском - можете определить элемент как переменную модуля, так вы всегда получите к нему доступ.
А где описан этот вариант? Хочется воспользоваться.
При запуске примера example-all-component.os из examples выдает ошибку:
{Модуль /usr/share/oscript/lib/gui/examples/example-all-components.os / Ошибка в строке: 107 / Внешнее исключение (System.NotSupportedException): Specified method is not supported.}
Строка:
ПолеСоСписком1.СписокВыбора = Данные; После комментирования этой строки и такой же для ПолеСписка1 пример запускается и отрабатывает.
1. Сначала не находилась библиотека gui. Нашлась после того, как я вручную добавил файл package-loader.os в папку библиотеки. Причем мне пришлось поменять слэш в пути к библиотеке с обратного на прямой (я в ubuntu).
2. Поведение, описанное в моем предыдущем посте не поменялось. Видимо есть какой-то нюанс в mono.
Формы не отображаются при выполнении из скомпилированного .exe файла
проверял на oscript 1.4.0, 1.7.0
раньше работали (вроде на 1.3.4, мб и на 1.4.0). Защитник windows отключал, проверял на 2 разных компьютерах.
Мб подскажете ЧЯДНТ, или куда TestApp.exe по нажатии кнопки Выполнить сохраняет временные файлы компиляции?
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 540284
Создание 01.08.16 16:33
Обновление 24.07.18 16:48
Просмотры 40437
Загрузки 0
Рейтинг
158
Комментарии 103
Код открыт Да
Рубрики OneScript
Кому Разработчик
Тип файла Нет файла
Платформа Не имеет значения
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)