Создание асинхронных виджетов

Публикация № 1134615

Разработка - Работа с интерфейсом

виджет HTTP-сервис асинхронный фоновые задания AJAX

99
Описание нескольких способов создания асинхронных виджетов для 1С:Предприятия. Рассматриваются способы с использованием HTTP-сервисов и фоновых заданий.

Прежде чем начать

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

 
 Это информация из старого блога DevelPlatform.ru

Хоть материал и был создан в далеком 2015 году, но описанные подходы до сих пор применимы при разработке. Конечно, сейчас уже обновилась работа поля HTML-документа и появились некоторые другие крутые возможности платформы 1С, но это в основном частности. Все предложенные способы создания виджетов не единственные, в конце статьи Вы найдете ссылки на связанные публикации с другими работами коллег.

Виджет

В качестве примера подхода при работе с HTML-виджетами можно продемонстрировать конфигурацию 1С:Документооборот 2.x, где в обработке "Текущие дела" создана форма для отображения различных виджетов с данными о моих задачах, задачах отдела, созданных документах, редактируемых файлов и т.д. Замечательная реализация и в плане функционала, и в плане юзабилити интерфейса, но есть один минус. Обновление виджетов происходит, конечно же, через синхронную контекстную серверную процедуру, что означает передачу на сервер всей формы, получение там данных, перенос их в форму и затем возвращение ее на клиент.

Проще говоря, для обновления виджетов необходимо выполнять синхронный серверный вызов, на время которого выполняется блокировка пользовательского интерфейса. Кто знает, может в новых версиях 1С:Документооборот эта ситуация уже изменилась.

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

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

Мы пойдем другим путем и решим задачу двумя способами:

  • асинхронное обновление виджета с помощью фоновых заданий.
  • асинхронное обновление виджета с помощью AJAX-запросов к HTTP-сервису из поля HTML-документа.

Оба способа имеют плюсы и минусы, которые мы рассмотрим. И так, поехали!

Подготовка

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

Как Вы можете заметить, обновление виджета выполняется автоматически без блокировки пользовательского интерфейса.

На форме виджет добавлен в качестве поля HTML-документа, которое используется и для обновления через фоновые задания, и для обновления с помощью AJAX-запросов. Количество активных пользователей определяется по количеству активных сеансов с помощью следующей функции, расположенной в общем модуле "ВиджетыСервер" (серверный, вызов сервера):

Функция ПолучитьКоличествоАктивныхСеансов() Экспорт
	
	// Получаем количество активных сеансов
	КоличествоАктивныхСеансов = 0;
	Попытка
		ТекущиеСоединения = ПолучитьСеансыИнформационнойБазы();
		КоличествоАктивныхСеансов = ТекущиеСоединения.Количество();
	Исключение
		КоличествоАктивныхСеансов = -1;
	КонецПопытки;
	
	Возврат КоличествоАктивныхСеансов;
	
КонецФункции

Кроме этого в конфигурацию добавлен общий макет "ГлавнаяСтраница" с типом HTML-документ, в котором содержится разметка для виджета, а также скрипты для обновления данных с помощью AJAX-запроса.

 
 Разметка страницы в общем макете

Также добавлена общая форма "ВиджетАктивныеСеансы" с помещенным на нее полем HTML-документа, в которое будет помещаться содержимое виджета. Эта форма добавлена в рабочую область начальной страницы, чтобы при запуске сеанса пользователя виджет сразу же открывался. Ничего особенного в ней нет, только полей HTML-документа (см. выше).

Теперь рассмотрим подробнее каждый из способов.

Фоновые задания

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

Мы реализуем собственный функционал по выполнению асинхронных операций в фоновых заданиях, потому что внедрять для демонстрации примером БСП было бы не разумно =). Но для рабочих задач БСП конечно же правильный выбор.

Запуск и отслеживание

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

 
 АсинхронныеВызовы
 
 АсинхронныеВызовыКлиент
 
 АсинхронныеВызовыКлиентГлобальный
 
 АсинхронныеВызовыСервер
 
 ВиджетыСервер

В модуле "АсинхронныеВызовыСервер" находятся процедуры и функции для непосредственного запуска фоновых заданий и проверки их состояний. Все остальные модули реализуют взаимодействие с фоновыми заданиями с клиентской стороны: запуск, проверка состояния, запуск клиентского метода по завершению фонового задания.

Для отслеживания состояния запущенных фоновых заданий в модуль управляемого приложения была добавлена экспортная переменная:

Перем АктивныеАсинхронныеОперации Экспорт;

Переменная инициализируется как массив, куда при запуске операции добавляется объект "Фоновое задание".

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

&НаКлиенте
Процедура ОбновитьКоличествоАктивныхСеансовНачало() Экспорт
	
	ТекущаяОперация = АсинхронныеВызовы.ВызватьФункцию(
		// Функция, запускаемая в фоновом задании
		"ВиджетыСервер.ПолучитьКоличествоАктивныхСеансов",
		// Доп. параметры, у нас они не используются
		, 
		// Текущая форма вызова
		ЭтаФорма, 
		// Клиентская экспортная процедура, выполняемая
		// после завершения фонового задания
		"ОбновитьКоличествоАктивныхСеансовНачалоЗавершение");	
	
КонецПроцедуры

После вызова асинхронной функции запускается глобальный обработчик ожидания, проверяющий текущее состояние всех запущенных фоновых заданий. Когда фоновое задание завершает свою работу, обработчик запускает ту клиентскую процедуру, имя которой мы указали в последнем параметре. Эта процедура должна располагаться в передаваемой форме. Листинг нашей завершающей процедуры следующий:

&НаКлиенте
Процедура ОбновитьКоличествоАктивныхСеансовНачалоЗавершение(АсинхронныйВызов, 
	Состояние, ВозвращенноеЗначение, ОписаниеОшибки) Экспорт
	
	// Если состояние "Завершен", значит фоновое задание отработало без ошибок
	// и вернуло корректное значение. В противном случае оставляем значение
	// по умолчанию
	КоличествоАктивныхСеансов = "---";
	Если Состояние = "Завершен" Тогда
		КоличествоАктивныхСеансов = ВозвращенноеЗначение;
	КонецЕсли;
	
	// Заменяем часть разметки страницы, подставляя туда
	// полученное значение из фонового задания
	НовоеЗначениеТекстаВиджета = ТекстШаблонаВиджета;
	НачалоРазделаСкриптовСтрока = "<!--Раздел скриптов - Начало-->";
	КонецРазделаСкриптовСтрока = "<!--Раздел скриптов - Конец-->";
	НачалоРазделаЗначениеСтрока = "<!--Активные пользователи - Начало-->";
	КонецРазделаЗначениеСтрока = "<!--Активные пользователи - Конец-->";
	
	НачалоРазделаСкриптов = СтрНайти(НовоеЗначениеТекстаВиджета, НачалоРазделаСкриптовСтрока);
	КонецРазделаСкриптов = СтрНайти(НовоеЗначениеТекстаВиджета, КонецРазделаСкриптовСтрока);
	НовоеЗначениеТекстаВиджета = Сред(НовоеЗначениеТекстаВиджета, 1, НачалоРазделаСкриптов-1)
		+ Сред(НовоеЗначениеТекстаВиджета, КонецРазделаСкриптов+СтрДлина(КонецРазделаСкриптовСтрока), СтрДлина(НовоеЗначениеТекстаВиджета)-КонецРазделаСкриптов+1);
		
	НачалоРазделаЗначение = СтрНайти(НовоеЗначениеТекстаВиджета, НачалоРазделаЗначениеСтрока);
	КонецРазделаЗначение = СтрНайти(НовоеЗначениеТекстаВиджета, КонецРазделаЗначениеСтрока);
	НовоеЗначениеТекстаВиджета = Сред(НовоеЗначениеТекстаВиджета, 1, НачалоРазделаЗначение-1) + 
		Строка(КоличествоАктивныхСеансов) 
		+ Сред(НовоеЗначениеТекстаВиджета, КонецРазделаЗначение+СтрДлина(КонецРазделаЗначениеСтрока), СтрДлина(НовоеЗначениеТекстаВиджета)-КонецРазделаЗначение+1);
		
	// Передаем сформированную HTML-разметку в поле HTML-документа на форме
	АктивныеСеансыВиджет = НовоеЗначениеТекстаВиджета;
	
	// Подключаем обработчик ожидания для повторного запуска
	// асинхронной операции
	ПодключитьОбработчикОжидания("ОбновитьКоличествоАктивныхСеансовНачало", 5, Истина);

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

Таким образом будет выполняться асинхронный запуск серверной процедуры "ПолучитьКоличествоАктивныхСеансов()", а ее по завершению операции полученное значение передано обратно на клиент.

Плюсы и минусы

 
 Плюсы
 
 Минусы

AJAX

AJAX (Asynchronous Javascript and XML) - подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. У нас, конечно, не веб-приложение, но частично применить этот подход все же возможно. Например, в одной из прошлых статей мы уже рассматривали пример создания и использования HTTP-сервиса и там тоже был AJAX.

HTTP-сервис

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

  1. Добавляем HTTP-сервис и настраиваем корневой URL
  2. Создаем шаблон URL
  3. Добавляем GET-метод
  4. Публикуем базу

Листинг обработчика GET-метода приведен ниже:

Функция ActiveUsersget(Запрос)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Ответ = Новый HTTPСервисОтвет(200);
	
	КоличествоАктивныхПользователей = ВиджетыСервер.ПолучитьКоличествоАктивныхСеансов();
	
	// Формируем ответ в формате JSON
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.ЗаписатьНачалоОбъекта();
	ЗаписьJSON.ЗаписатьИмяСвойства("ActiveUsers");
	ЗаписьJSON.ЗаписатьЗначение(КоличествоАктивныхПользователей);
	ЗаписьJSON.ЗаписатьКонецОбъекта();
	СтрокаJSON = ЗаписьJSON.Закрыть();	
	Ответ.УстановитьТелоИзСтроки(СтрокаJSON, "UTF-8");
	
	Возврат Ответ;
	
КонецФункции

И все! Далее создаем сам виджет.

Поле HTML

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

Как и в случае с реализацией виджета при помощи фоновых заданий, HTML-разметка виджета хранится в том же общем макете и в момент создания формы помещается в поле HTML-документа. Только теперь получение количества активных пользователей выполняется не фоновым заданием, а при помощи AJAX-запроса самой страницы, направленного ранее созданному к HTTP-сервису.

Вот так выглядит синтаксис AJAX-запроса на странице:

$.ajax({
    crossDomain: true,
    type: "GET",
    contentType: "application/json;charset=utf-8",
    url: "http://localhost/Exp/hs/DevelPlatform/Users",
    dataType: "json",                
    success: function (queryResult) {
        $("#activeUsersValue").text(queryResult.ActiveUsers - 1);                
    },
    error: function (xhr, ajaxOptions, thrownError) {
        $("#activeUsersValue").text("---");
 
    }
});

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

HTTP-сервис возвращает нам JSON-объект с единственным свойством "ActiveUsers". В событии "success", при успешном выполнении запроса, извлекается полученное значение и присваивается элементу <p> на веб-странице. При возникновении ошибок в качестве значения будет присвоена строка "---".

Именно эта реализация демонстрируется на анимации раздела "Подготовка" в самом начале статьи.

Плюсы и минусы

 
 Плюсы
 
 Минусы

Выводы

Лучшим вариантом все же является использование фоновых заданий, ведь работа виджетов в тонком и толстом клиенте критична в большинстве случаев. С появлением WebKit использование AJAX в поле HTML-документа становится возможной, поэтому виджеты с его использованием будут очень эффективными и функциональными.

Предложенные варианты не единственные и не всегда могут подойти. Делитесь своим опытом, будет интересно узнать!

А как виджеты делайте Вы?

Другие ссылки

99

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. wowik 615 16.10.19 16:50 Сейчас в теме
+1. А файлов для скачивания не будет?
YPermitin; +1 Ответить
2. YPermitin 5739 16.10.19 16:51 Сейчас в теме
(1) демонстрация в виде листингов вроде исчерпывающая.

А так нужно делать какую-то демоконфигурацию, выносить все в настройки, чтобы каждый мог у себя развернуть и так далее. То есть это уже сложнее, и больше будет походить на разработку.
vasiliy_b; acanta; Sedaiko; +3 Ответить
3. YPermitin 5739 16.10.19 16:54 Сейчас в теме
(1) планирую выложить другие разработки, среди них есть подобный виджет для 1С:Документооборот в виде расширения. Но сроки пока не назову.
4. belyuchenko.ilia 17.10.19 07:11 Сейчас в теме
Но как это работает в отношении безопасности? Я так понимаю HTTP-форма с аякс запросом будет подключаться к веб-сервису независимо от текущей пользовательской сессии? Т.е. для подключения ей потребуется провести аутентификацию отдельно от клиента? Или в 1С это как-то обыграно?
TigerAdmin; YPermitin; +2 Ответить
5. YPermitin 5739 17.10.19 07:16 Сейчас в теме
(4) вопрос с аутентификацией можно решить двумя путями:
1. Использовать BASIC-аутентификацию от 1С. Для этого в Ajax-запросе нужно ее использовать:
beforeSend: function (xhr) {
    xhr.setRequestHeader ("Authorization", "Basic " + btoa(username + ":" + password));
}

При этом пользователь, от имени которого будет подключение к HTTP-сервису, должен обладать минимальными правами в системе 1С.

2. Можно сделать веб-службу не на 1С и для виджетов использовать ее (например WebApi-приложение на .NET Core). Для авторизации использовать токены. Но это может выглядеть намного сложнее, чем реализация в 1С, но со своими преимуществами. В комментариях такое не описать.
6. belyuchenko.ilia 17.10.19 07:46 Сейчас в теме
Я практически не работал с веб-клиентом, отсюда вопросы...
Выходит, что в веб-интерфейсе нет своих встроенных асинхронных интерфейсных элементов?
К тому же веб-клиент вроде бы использует вызовы через апи типа */e1cib/ и там json тоже используется.
Наверняка можно как то оформить функцию так, чтобы ее можно было вызывать асинхронно через этот интерфейс без необходимости делать это через веб-сервис. К тому же это позволило бы обойтись без отдельной аутентификации.
YPermitin; +1 Ответить
7. YPermitin 5739 17.10.19 07:53 Сейчас в теме
(6) возможно, но это скользкий путь.

Веб-клиент не подразумевает кастомизацию и "допилки" могут сломаться с выходом новой платформы.
8. vpaoli 28 17.10.19 14:42 Сейчас в теме
Вот эта ссылка
"рассматривали пример создания и использования HTTP-сервиса"

не открывается
YPermitin; +1 Ответить
9. YPermitin 5739 17.10.19 14:45 Сейчас в теме
(8) спасибо, что нашли багу.

Исправил. Тут ссылку продублирую: https://infostart.ru/public/1120823/
10. Vortigaunt 72 18.10.19 10:08 Сейчас в теме
Очень интересный подход. Меня интересует, можно ли применить Ajax в платформе 8.2 да еще так, чтобы этот скрипт вызвал внешнее событие, которое отлавливается платформой?
11. 1c-intelligence 8839 18.10.19 20:28 Сейчас в теме
Юрий, а о подходе "Рабочего стола" к решению этой задачи что думаете?
YPermitin; +1 Ответить
14. triviumfan 10 21.10.19 09:46 Сейчас в теме
15. 1c-intelligence 8839 21.10.19 20:15 Сейчас в теме
12. davdykin 18 21.10.19 07:28 Сейчас в теме
Статья конечно отличная, большое спасибо! Хотелось бы конечно какой-то стабильности от платформы, методы работы с Ajax запросами интересны, но отсутсвие стабильности сильно его губит.
YPermitin; +1 Ответить
13. triviumfan 10 21.10.19 09:40 Сейчас в теме
Наконец-то годнота подъехала!
YPermitin; +1 Ответить
Оставьте свое сообщение

См. также

Управляемые формы. Изменение формы списка или формы объекта без внесения изменений в типовые формы (без использования расширений) 51

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Вносим изменения в типовые формы объектов (документы, справочники, журналы, обработки, общие формы). Не снимая с поддержки эти формы. Создаем программно элементы из общего модуля. Для примера рассмотрю добавление колонки "Скрепка" в форму списка документа. Если к документу привязан файл, то в списке в новой колонке должна отображаться "скрепка".

12.11.2019    2067    John_d    18       

ELK. Время изумительных историй! 25

Статья Системный администратор Программист Бизнес-аналитик Руководитель проекта Нет файла v8 1cv8.cf Бесплатно (free) Журнал регистрации Работа с интерфейсом

Всем привет! Сегодня хочу рассказать вам несколько полезных историй про то как нам помог Elastic search в связке с Kibana. Про сам Elastic рассказывать не буду, уже все давным давно описали и до меня. Все обычно говорят что это полезно, это классно. В то же время, очень мало кто рассказывает про практические ситуации: когда и как помог Elastic. Итак, начнем.

31.10.2019    2671    slozhenikin_com    23       

"Живые" картинки со Snap.SVG 52

Статья Программист Конфигурация (md, cf) v8 Абонемент ($m) Практика программирования WEB Работа с интерфейсом

В статье рассмотрен пример использования http-сервисов для визуализации данных

1 стартмани

24.10.2019    3022    7    blackhole321    2       

Формы. Трудности программной работы 77

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Бесплатно (free) Работа с интерфейсом

Рассматриваем основные подводные камни, с которыми приходится сталкиваться при программной работе с формами, а также способы обхода самых частых проблем.

06.10.2019    4611    YPermitin    21       

Лайфхаки 1С (часть 1). Настройки отчетов и печатных форм 1С 38

Статья Программист Пользователь Стажер Нет файла v8 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

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

02.10.2019    5382    VachKirp    9       

Добавляем виджет "Задачи от меня" в Документооборот 2.1 26

Статья Программист Нет файла v8 v8::Бизнес-процессы ДО Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Небольшая доработка Документооборота 2.1 для возможности добавления виджета "Задачи от меня" в обработку Текущие дела.

25.09.2019    2179    Sergey_Borisovi4    3       

Самый примитивный HTTP-сервис в мире 173

Статья Программист Нет файла v8 Бесплатно (free) WEB

Пошаговый пример создания простейшего HTTP-сервиса, который генерирует HTML-страницу для поиска товара, а также реализует асинхронное получение данных из базы.

12.09.2019    7827    YPermitin    26       

[Механизм интерфейса] Часы 54

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом Практика программирования Разработка

Добавляем цифровые часы на форму, как бонус рассмотрим вариант и с аналоговыми.

26.08.2019    3657    rpgshnik    33       

Произвольная начальная страница через расширение (программно) 41

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Установка своей формы произвольному пользователю на начальную страницу.

14.08.2019    3152    nagaitseff    11       

Подходы, методы и инструменты UX/UI для разработки эффективных интерфейсов на 1С 32

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Интерфейсам в 1С обычно уделяют мало внимания. Это в итоге снижает востребованность платформы, делает ее неконкурентной, лишает большой доли рынка. Как не потерять старых клиентов и привлекать новых с помощью интерфейсов, а главное – как сделать «правильный» интерфейс, рассказал участникам конференции Infostart Event 2018 Education управляющий партнер и основатель консалтинговой группы WiseAdvice Иван Тягунов.

07.08.2019    5054    IvanAT1981    14       

Пользовательские настройки системы компоновки данных 88

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Работа с интерфейсом

Работа с отчетами в пользовательском режиме, формы отчетов. Понятие пользовательских настроек в отчетах на СКД. Определение состава пользовательских настроек для разделов в целом и для отдельных элементов, для всего отчета и для отдельных группировок. Видимость функциональных опций в отчетах на СКД.

09.07.2019    7795    ids79    0       

Подсистема "Варианты отчетов". Используете ли Вы ее правильно? 215

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом БСП (Библиотека стандартных подсистем)

Небольшая история про использование подсистемы "Варианты отчетов" из БСП. Используете ли Вы ее правильно?

04.06.2019    16892    YPermitin    49       

Расшифровка отчета на СКД с детализацией по выбранному полю на основе БСП 92

Статья Программист Нет файла v8 v8::УФ v8::СКД 1cv8.cf Россия Бесплатно (free) Практика программирования Работа с интерфейсом Разработка

В данной статье рассмотрим механизм работы с расшифровкой отчета, созданного при помощи системы компоновки данных, в управляемом приложении. Показывать буду на примере реальной задачи. Условие: использовать имеющиеся в конфигурации механизмы БСП, с минимальными и "правильными" изменениями. Расшифровка должны быть двух видов на каждом поле: 1. Открывать ссылочный объект 2. Открывать новую форму с детализацией табличной части документа. Собственно ради второго пункта и писалась статья, в основном для себя, чтобы не забыть.

14.05.2019    8395    Viktor_Ermakov    6       

Свой макет оформления отчета 34

Статья Программист Нет файла v8 v8::СКД Россия Windows Бесплатно (free) Работа с интерфейсом

Пример создания и оформления и применения своего (пользовательского ) макета оформления для СКД.

24.04.2019    5285    olegpkc    5       

1С и WebKit. Вариант взаимодействия 50

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Windows Абонемент ($m) WEB

В результате перехода на WebKit тип свойства Документ у поля, имеющего вид ПолеHTMLДокумента, изменился с COMОбъект на ВнешнийОбъект. Также изменилась DOM модель документа, доступная через это свойство.

2 стартмани

23.02.2019    11099    34    mi1man    36       

Динамический вывод таблицы значений на форму 35

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Вывести на форму таблицу значений, а потом на её место другую, третью, четвёртую? Не вопрос.

11.01.2019    6259    Vlad1917    26       

Прикладной пример переработки стандартной формы РМК - Розница 74

Статья Программист Нет файла v8 Розница УУ Кассовые операции Розничная торговля Бесплатно (free) Работа с интерфейсом

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

04.10.2018    11520    asdfgcom    56       

Cправочная информация. Картинки. 16

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

Справочную информацию мало кто любит писать, но вот захотелось. И что с этим делать?

06.06.2018    6753    aspirator23    2       

Итоги в динамическом списке 48

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

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

28.05.2018    9462    CXY    16       

Программное управление обычными формами документов и справочников в УПП/КА 34

Статья Программист Нет файла v8 v8::УФ КА1 УПП1 Россия Бесплатно (free) Работа с интерфейсом

Если с программным изменением управляемых форм 1С все более или менее понятно, то с программированием обычных форм примеров не так уж много в сети. А уж примеров готовых решений совсем не видно. В данной статье я покажу, как можно реализовать аналог "управляемых" форм в своих конфигурациях с обычными формами и забыть о сложностях обновлений форм.

09.05.2018    8803    dima_home    9       

Решение проблемы отображения интерфейса Такси на экранах с маленьким разрешением 26

Статья Программист Нет файла v8 v8::УФ Беларусь Windows Бесплатно (free) Работа с интерфейсом

Решение возникшей проблемы при переходе с интерфейса 8.2 на интерфейс Такси на экранах с маленьким разрешением.

06.04.2018    10088    Drak87    18       

Погодка 2.0. Виджет для Бухгалтерии 3.0 [Расширение] 6

Отчеты и формы no Расширение (cfe) v8 БП3.0 Россия Абонемент ($m) Универсальные обработки Работа с интерфейсом

Погодка 2.0 - очаровательный виджет для Бухгалтерии 3.0 с прогнозом погоды в вашем городе.

1 стартмани

19.03.2018    5901    15    infosoft-v    0       

Виджеты для третьей бухгалтерии. [Расширение] Шаблон блоков для информационной панели. 27

Инструменты и обработки Программист Расширение (cfe) v8 БП3.0 Абонемент ($m) Работа с интерфейсом

Расширение конфигурации Бухгалтерия предприятия 3.0 для создания собственных блоков (виджетов) информационной панели.

1 стартмани

25.02.2018    9463    17    infosoft-v    3       

Красивые графики. Пошаговая инструкция (Highstock) 122

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

Данный подход опробован на библиотеках: Нighcharts и Highstock. Для работы будет необходима 1С и браузер Google Chrome. Чукча не писатель (первая публикация).

22.11.2017    14581    Degrement    20       

Меняем стандартную форму выбора для реквизита формы на свою форму с запросом 51

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Алгоритм действий для смены стандартной формы выбора для реквизита формы на свою форму со своей выборкой данных и возвратом нескольких параметров в вызывающую форму

30.09.2017    16260    ah7777777    24       

"Мигаем" интерфейсом, или цепочки асинхронных вызовов 71

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

Как, не блокируя интерфейс, привлечь внимание пользователя к интерфейсным элементам. Или, попросту говоря, "мигнуть" чем-то.

06.09.2017    13046    Chrizt    13       

Инструменты бухгалтера: Виджеты рабочего стола 125

Инструменты и обработки Бухгалтер Расширение (cfe) v8 v8::БУ БП3.0 Windows Абонемент ($m) Универсальные обработки Рабочее место

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

2 стартмани

28.08.2017    26277    159    Bazil    22       

"Восстановить положение окна" - не помогает. Как я решил проблему. 28

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Работа с интерфейсом

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

28.05.2017    48949    niko11s    44       

Как добавить/убрать кота в отчет? 78

Статья Программист Нет файла v8 БП3.0 Бесплатно (free) Работа с интерфейсом

Кот в отчете: кому-то нравится, кого-то жутко бесит. Как избавиться, заменить, оставить (нужное подчеркнуть)?

12.05.2017    23658    starik-2005    16       

Итоги в динамическом списке 47

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Работа с интерфейсом

Как быстро посчитать итоги в динамическом списке

03.04.2017    21735    Восьмой    34       

Как "перемотать" динамический список в начало при открытии? (или некоторые нюансы получения данных динамического списка) 57

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

В современных интерфейсах (новостях, социальных сетях и прочим) принято размещать новые данные сверху, более старые - внизу. К сожалению, в 1C сделано несколько по-другому - по умолчанию списки документов отсортированы по возрастанию даты и далее возможно два варианта: либо список при открытии проматывается в конец, либо список может запоминать "последнюю" текущую строку.

03.11.2016    19459    Fragster    25       

Программное создание графических схем (v.2): API для ГрафическойСхемы 73

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом Универсальные функции

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

27.09.2016    17258    serg_infostart    15       

Автоматическое добавление новых реквизитов на форму (УФ) 39

Статья Программист Нет файла v8 v8::УФ Бесплатно (free) Работа с интерфейсом Универсальные функции

Идея такая: Программист добавил реквизит в объект. В комментарии этого реквизита прописал некое спец. слово (можно не матерное). На форму объекта новый реквизит далее попадает автоматом в спец. группу "Дополнительно".

03.08.2016    16637    Патриот    23       

Управляемые формы: Поле HTML Документа и веб-клиент 58

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования Работа с интерфейсом

Взаимодействие javascript и интерфейса 1С дает огромные возможности для реализации нестандартных функций. Раньше можно было напрямую вызывать функции JavaScript через DOM объект document Поля HTML документа. В современных браузерах эта возможность ушла. Более того, в веб-клиенте появляется тип ВнешнийОбъект, который вообще нигде не описан. На Инфостарте были предложения вызывать JavaScript через fireEvent, но это очень неудобно. Предлагаю свой вариант решения.

18.07.2016    25040    compguru    10       

Создание виджетов (widgets) в 1С 20

Статья Программист Нет файла Бесплатно (free) Практика программирования

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

06.07.2016    15181    sikuda    6       

Как вывести динамическое представление для пустого значения (в таблице)? 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Работа с интерфейсом

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

29.03.2016    10079    weissfeuer    9       

Выделение документов в динамическом списке 20

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

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

01.02.2016    16189    Sardukar    7       

Три приёма, позволяющие сделать интерфейс конфигураций 1С на управляемых формах удобнее при большом шрифте 52

Статья Программист Нет файла v8 УНФ ERP2 БП3.0 Windows Бесплатно (free) Работа с интерфейсом Универсальные функции

С появлением управляемых форм вообще и БП 3.0 в частности пользователи, которые не хотят портить своё зрение рассматриванием мелкого шрифта, оказались в невыгодном положении. Многих элементов на экране в "тяжёлых" документах вообще оказалось не видно. Все попытки решить вопрос штатными средствами настройки предприятия оказались неэффективны. Вот несколько приёмов, которые буквально в два щелчка мышкой и парой строк кода помогут решить проблему.

05.11.2015    15373    H-Labs    11       

Как скрыть "пустые группы" в списке выбора справочника при отборе 47

Статья Программист Нет файла v8 Бесплатно (free) Работа с интерфейсом

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

29.10.2015    26397    shevelyov    25       

Открытие форм нескольких новых документов в тонком и толстом клиенте, УФ 23

Статья Программист Нет файла v8 v8::УФ 1cv8.cf Windows Бесплатно (free) Работа с интерфейсом

Если Вам необходимо создать несколько документов, а затем открыть их формы для пользователя.

1 стартмани

29.09.2015    18439    Wezoowy    13       

Параметры сеанса. 48

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Параметры сеанса - это объекты метаданных конфигурации. Поговорим об их назначении и принципах работы с ними.

06.09.2015    56781    niko11s    8       

Шкала в строке состояния 51

Статья Программист Нет файла v8 Windows Бесплатно (free) Работа с интерфейсом

Простая шкала, не требующая дополнительных форм и элементов управления

31.08.2015    13896    Ivon    26       

Назначение сочетания клавиш для кнопок командной панели (Обычные формы) 13

Статья Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Практика программирования Работа с интерфейсом

Назначение сочетания клавиш кнопкам командной панели Формы списка/выбора для любой конфигурации (Обычные формы)

07.08.2015    15748    bld    7       

Развитие управляемого интерфейса в 1С 8.2 - 1С 8.3 55

Статья Программист Нет файла v8 Windows Бесплатно (free) Практика программирования Математика и алгоритмы Работа с интерфейсом

К управляемым формам, которые появились в 8.2, я до сих пор относился презрительно. Считал это неудачной попыткой 1С следовать модным тенденциям в разработке интерфейсов и прогибом для возможности работать через браузер. Я считал, что 1С пожертвовала простотой разработки в угоду веб-доступу. Но после курсов Арутюнова Сергея по управляемому интерфейсу в июле 2015 года в УЦ1 я поменял ненависть на любовь. Звучит парадоксально, но это так. А теперь подробнее…

27.07.2015    35499    fixin    103