8.5: Интеллектуальные подсказки как основа для кастомизации

21.10.25

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

Вот это фокус! Листаешь список номенклатуры, а он тебе подсказывает. Задержал курсор на секунду — и сразу видишь остатки, последнюю закупочную цену и номер документа. Всё благодаря новому методу ПриНаведении в 8.5. Никаких лишних кликов — вся информация под рукой.

Бесплатные

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Бесплатно
Расширение: При наведении на объекты
.cfe 34,81Kb
4 Скачать бесплатно

 

Предыстория: Почему 8.5 и как это тут появилось?
 

С выходом 8.5 с новым интерфейсом «Элемент». Энтузиазм и любопытство потрогать новинку не утихали, и в один скучный вечер я поднял платформу, установил БСП и перевел всё на новый интерфейс. Не без нюансов, конечно, но это уже отдельная тема. Затем полем для экспериментов стал «УТ», один из последних релизов.

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

 

Идея: получаем подсказки без перехода в карточку или отчет
 

Взгляд упал на метод формы списка ПриНаведении. Возникла мысль: а что, если пользователь, листая список (выбора или основной), мог бы получать дополнительные подсказки или сообщения? Начать решил с простого — выводить последнее поступление, остатки и цену. Если пользователь задерживается на строке хотя бы на секунду, всплывает подсказка с этой информацией.

За основу берем форму списка справочника «Номенклатура».

 

Реализация: пишем серверные обработчики

 

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

1. Находим последнее поступление:

&НаСервере
Функция НайтиПоследнееПоступление(Номенклатура)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |	Товары.Цена КАК Цена,
    |	Товары.Количество КАК Количество,
    |	Товары.Ссылка.Дата КАК Дата,
	|	Товары.Ссылка.Номер КАК НомерДокумента
    |ИЗ
    |	Документ.ПриобретениеТоваровУслуг.Товары КАК Товары
    |ГДЕ
    |	Товары.Номенклатура = &Номенклатура
    |	И Товары.Ссылка.Проведен = ИСТИНА
    |	И Товары.Ссылка.ПометкаУдаления = ЛОЖЬ
    |
    |УПОРЯДОЧИТЬ ПО
    |	Дата УБЫВ";
    
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если РезультатЗапроса.Пустой() Тогда
        Возврат Новый Структура();
    КонецЕсли;
    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    Возврат Выборка;

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

2. Получаем остатки по номенклатуре на текущую дату:

&НаСервере
Функция ПолучитьТекущиеОстатки(Номенклатура)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ВТ_Остатки.ВНаличииОстаток КАК Количество
    |ПОМЕСТИТЬ ВТ_Остатки
    |ИЗ
    |	РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура = &Номенклатура) КАК ВТ_Остатки
    |;
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |	ВТ_Остатки.Количество КАК Количество
    |ИЗ
    |	ВТ_Остатки КАК ВТ_Остатки";
    
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Дата", ТекущаяДата());
    РезультатЗапроса = Запрос.Выполнить();
    
    Остаток = 0;
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() Цикл
            Остаток = Остаток + Выборка.Количество;
        КонецЦикла;
    КонецЕсли;
    Возврат Остаток;
КонецФункции

 

 

Реализация простая, «на коленке», можно было в целом и в один запрос, может как-нибудь структурой вывести, но так скажем "Дисклеймер - все написанное является плодом воображения автора и не носит экспертный характер". Поэтому еще раз прошу не судить строго.

Собираем всё вместе на клиенте

1. Объявляем переменные на форме для передачи идентификатора строки.

&НаКлиенте
Перем СсылкаСтроки;
&НаКлиенте
Перем ПолеСтроки;

Для чего нам эти переменные, так как в обработчик ожидания нельзя передать параметры, делаем хитрую уловку, чтобы «протащить» параметры из обработчика наведения в обработчик ожидания эти переменные как временное хранилище, чтобы сохранить данные о текущей строке и поле между вызовами обработчиков.

2. Определяем процедуру ПриНаведении, где подключим обработчик ожидания.

Он нужен, чтобы не спамить вызовами и отложить запуск процедуры показа подсказки.

&НаКлиенте
Процедура Расш_СписокСтандартныйПоискНоменклатураПриНаведенииПосле(Элемент, Строка, Поле)
    // Помещаем строку во временное хранилище
    СсылкаСтроки = Строка;
    ПолеСтроки = Поле;
    // Подключаем обработчик на 1 секунду
    ПодключитьОбработчикОжидания("ПоказатьПодсказкуПоТаймеру", 1);
КонецПроцедуры

3. Процедура показа подсказки по таймеру.

Вызываем функцию, получаем текст, очищаем старые сообщения и показываем новое.

&НаКлиенте
Процедура ПоказатьПодсказкуПоТаймеру()
    ДанныеПодсказки = ПолучитьДанныеДляПодсказки(СсылкаСтроки);
    // Очищаем сообщения и показываем новую подсказку
    ОчиститьСообщения();
    ОбщегоНазначенияКлиент.СообщитьПользователю(ДанныеПодсказки.Текст, СсылкаСтроки, ПолеСтроки,,);    
КонецПроцедуры

4. Функция получения данных для подсказки

&НаСервере
Функция ПолучитьДанныеДляПодсказки(СсылкаСтроки)
    
    Результат = Новый Структура("Текст, Заголовок");
    ПоследнееПоступление = НайтиПоследнееПоступление(СсылкаСтроки);
    
    // Формируем текст подсказки
    Текст = "";
    
    Если ПоследнееПоступление.Количество() = 0 Тогда
        Текст = Текст + "d60; Не поступала" + Символы.ПС;
    Иначе
        Текст = Текст + " Последнее поступление: " + 
                Формат(ПоследнееПоступление.Дата, "ДФ=dd.MM.yyyy") + Символы.ПС;
        Текст = Текст + " Цена: " + 
                Формат(ПоследнееПоступление.Цена, "ЧДЦ=2; ЧГ=0; ЧРД=.") + " руб." + Символы.ПС;
        Текст = Текст + " Количество: " + 
                Формат(ПоследнееПоступление.Количество, "ЧДЦ=2; ЧГ=0; ЧРД=.") + Символы.ПС;
        Текст = Текст + " Документ: " + ПоследнееПоступление.НомерДокумента;
    КонецЕсли;
    
    // Добавляем текущие остатки
    Остатки = ПолучитьТекущиеОстатки(СсылкаСтроки);
    Если Остатки > 0 Тогда
        Текст = Текст + Символы.ПС + " В наличии: " + Формат(Остатки, "ЧДЦ=2; ЧГ=0; ЧРД=.");
    КонецЕсли;
    
    Результат.Текст = Текст;
    Результат.Заголовок = СсылкаСтроки.Наименование;
    
    Возврат Результат;
    
КонецФункции

 

 

Заключение: Зачем это все надо было?

 

Этим простым примером я хотел попробовать и продемонстрировать один из сценариев в среде платформы 8.5, конкретно на форме списка. Но главное даже не сам пример, а открываемые им возможности.

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

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

  • Расширенная аналитика. Для документа приобретения можно выводить не просто факт, а целую мини-инфографику: статус оплаты, расхождения при приемке, прикрепленные документы.

И это мы затронули только справочник номенклатуры. Механизм — своего рода плацдарм для фантазии. Скорее всего, с запуском полноценной релизной 8.5 1С сама добавит что-то подобное, но ничто не мешает нам уже сейчас творить удобные и нестандартные интерфейсы, копаясь в новшествах платформы. 

Спасибо за внимание и всего доброго!

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 11, релизы 11.5.22.106

Вступайте в нашу телеграмм-группу Инфостарт

8.5 Расширение Платформа Бесплатно Интерфейс Форма списка ПриНаведении

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С v8.3 8.3.14 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    44433    26    22    

39

Работа с интерфейсом Рабочее место 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    66727    45    60    

84

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5160 руб.

29.06.2020    22276    32    6    

50

Работа с интерфейсом Программист 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

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

5040 руб.

06.10.2020    12312    8    8    

14

Работа с интерфейсом Программист Стажер 1С v8.3 Бесплатно (free)

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

20.08.2024    40477    mrXoxot    44    

136

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

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    23823    smielka    38    

111

Работа с интерфейсом 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    21982    1307    elcoan    53    

128

Инструментарий разработчика Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

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

3 стартмани

10.04.2023    15706    177    acces969    31    

132
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mrXoxot 3191 21.10.25 08:08 Сейчас в теме
2. evisio 3 21.10.25 08:21 Сейчас в теме
3. PowerBoy 3477 21.10.25 09:02 Сейчас в теме
4. RocKeR_13 1457 21.10.25 10:02 Сейчас в теме
Теперь бухгалтер сможет положить базу, просто водя мышкой по экрану)))
Tarlich; Darklight; chebser; user2062194; friskdb; +5 Ответить
5. chebser 4 21.10.25 10:50 Сейчас в теме
Неплохо было бы в параметры самой процедуры добавить параметр "Задержка"
6. Darklight 35 21.10.25 10:59 Сейчас в теме
Мелочь - а нафиг надо....
Замеры времени разного UX делали? Нет. А зря!
Вот сделайте - за сколько времени активный энергичный пользователь проверит остатки выборочно скажем 10 позиций Номенклатуры среди сотен в списке (допустим отбираем номенклатуру только с 3 словами в наименовании (без учета предлогов), и в результате считаем итоговый остаток
а) по старинке - кликнув и переведя взгляд на поле инфоостатков, проанализировать информацию (переключив мышление с одного представления - список на другое - инфополе), выполнив вычисления, перевести взгляд на текущую строку списка (и ещё мышку не дёргать туда сюда - а то её ещё перепозиционировать придётся)
б) по старинке - перебирая выбранные позиции стелечками на клавиатуре - не отрывая взгляда от поля инофоостатков (тут в идеале там надо и наименование выводить, но когда такие задачи оптимизируются - так и делают, чтобы глаза не бегали по всей форме)
в) по новому - аккуратно наведя курсор мыши на ячейку, перевести взгляд на инфополе, подождав обновления подсказки в поле инфоостатков (если наименование там не дублируется - надо ещё убедить себя - что оно успело обновиться, если значения совпадают с разными позициями, а ещё убедиться, что наименование не дублируется для разных позиций), проанализировать информацию (переключив мышление с одного представления - список на другое - инфополе), выполнив вычисления, перевести взгляд на текущую строку списка (и ещё мышку не дёргать туда сюда - а то её ещё перепозиционировать придётся, а то ещё раз всё повторить, если курсор сдвинется на другую ячейку ранее завершения визуальной обработки)
г) по старинке иначе - (решил добавить этот вариант тоже) - что куда удобнее и эффективнее такие задачи решать выводят остатки в отдельной колонке, получая из пакетно. Но это технически совсем другое решение, так что на нём тут не заостряю внимания - мало ли что и как там надо получать! Хотя если расчёт быстрый - скорее всего эффективнее всё равно пакетное считать, а если очень долгий - то считать нужно строго в фоне - и тут с наведением явно будет загвоздка, и опять же - пакетно, будет эффективнее!

Думаю по скорости вариант б) будет с большим отрывом впереди (или вариант г) всех уделает), затем вариант а) и немного отставая (если приноровиться) вариант в) - но тогда зачем его вообще затевать?

Не - ну данному событию явно найдётся применение. Но если ради этого всю форму надо перекраивать - нафиг надо!

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

Но надо и оптимизировать получение самих данных из СУБД (а то и не из СУБД, а кто его знает откуда ещё - хоть из внешнего сервиса) - а то этот алгоритм всё удобство убьёт на корню - вот это задачку куда посложнее будет - и тут нужны куда более серьёзные архитектурные изыскания.
Но с точки зрения UI - как минимум тут надо переходить на асинхронное (и фоновое) клиентское выполнение такого кода. А так же применение дополнительных предвыборок (отдельным фоновым потоком, чтобы не мешали приоритетному текущему) для выборки, условно, соседних данных, с последующим кешированием!
Как то так! Без этого - всё это почти бесполезно, с точки зрения повышения уровня UX!

Но... 1С Предприятие 8.5 не хочет развивать именно важный функционал - занимается всякой украшательской ерундой...

И да, кстати, на мобильной платформе/клиенте такого понятия как - наведение - вообще нет - так что - это нововведение ещё более сомнительно!
Лично я думал - всю эту реорганизацию форм в 8.5 затевали именно для мобильной платформы - но сейчас уже очень сильно в этом сомневаюсь! Просто тупо и небрежно тянут фишки динамики из 1С Элемент - неуместно и криво внедряя их в отмороженную заторможенную платформу 1С Предприятие 8.5 - чисто для галочки!
vagram663; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация