Быстрые отборы в списках типовых конфигураций

09.01.16

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

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

Скачать файлы

Наименование Файл Версия Размер
Описание доработок с Кодом
.docx 35,09Kb
0
.docx 1 35,09Kb Скачать

Для документов чрезвычайно удобным оказывается динамический интервал даты документа (Последние x дней для Начала интервала). Одновременно самым распространенным критерием поиска документа является ввод последних трех цифр номера, подразделения документа, Склада и т.п. Для своих нужд добавил в большинство используемых списков документов дополнительные поля быстрого отбора (чего и вам советую). Поля оптимизированы для самых массовых критериев поиска. А чтобы потратить минимум труда на добавление, использовал командное добавление полей и унифицированный код для добавления. Код позволяет добавлять и прятать поля быстрого отбора.

Следует учесть несколько моментов:

  • Поиск будет более быстрым, если для отбираемого реквизита будет существовать Индекс (настройка в конфигураторе).
  • И, разумеется, Поле должно быть выведено на форму списка.
  • Попадались случаи разного наименования Поля списка на форме (следует проверять).
  • Отбор числового значения (например, СуммаДокумента) можно настроить и как поиск точного значения, и как диапазон 1% разброса (или свой алгоритм).
  • На форме умещаются от 4 до 5 полей быстрого отбора (в одну строку и на развернутой форме).
  • При первоначальном заполнении, Форма списка оказывается в промежуточном размере, как следствие могут не все элементы расположатся оптимально. Лечится сворачиваем и разворачиваем быстрого отбора.
  • Форму списка снабжают кнопкой Сворачивания/Разворачивания Быстрого отбора.
  • После редактирования значений отбора, рекомендуется переносить фокус на сам список (для ускорения выбора нужного элемента).

Данная методика применима для большинства типовых конфигураций 1С на основе Толстого клиента (УТ_10, БП_2, УНФ, и др.).

Немного о структуре доработок:

ПриОткрытии() - автозапуск добавления быстрого отбора

БыстрыйОтборДок();// Подключаем быстрыйОтбор (или выключаем)

ПБОПриИзменении(Элемент) // Отработка изменения значения отбора (одна на всех)

 

Перем мОтбора;//Признак включения Быстрого отбора
Процедура ПриОткрытии()
    БыстрыйОтборДок();//НВЮ/ Подключаем быстрыйОтбор
    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.тНомер;//Активируем быстрый поиск по Номеру
КонецПроцедуры
//НВЮ/ Открыть быстрый отбор.
//Процедура ПриОткрытии()
//  БыстрыйОтборДок();// Подключаем быстрыйОтбор
Процедура БыстрыйОтборДок(ВклОтбора=Истина)
    //Параметры  (Начальное размещение полей)
    оВысота = 19;
    оВерх   = 28;
    оЛево   = 6;
    СпПБО   = Новый ТаблицаЗначений; //Таблица описания Быстрого отбора
    СпПБО.Колонки.Добавить("Значение");//Реквизит списка для отбора
    СпПБО.Колонки.Добавить("Представление");//Подпись на панели быстрого отбора
    СпПБО.Колонки.Добавить("Тип");//Тип значения отбора
    //Наполнение полей отбора
    НовПБО = СпПБО.Добавить();
    НовПБО.Значение = "Номер";  НовПБО.Представление = "№?"; НовПБО.Тип = "Строка";
    НовПБО = СпПБО.Добавить();
    НовПБО.Значение = "Контрагент"; НовПБО.Представление = "КА?";   НовПБО.Тип = "Контрагенты";
    НовПБО = СпПБО.Добавить();
    НовПБО.Значение = "Подразделение";  НовПБО.Представление = "Отд.?"; НовПБО.Тип = "Подразделения";
    НовПБО = СпПБО.Добавить();
    НовПБО = СпПБО.Добавить();
    НовПБО.Значение = "СуммаДокумента"; НовПБО.Представление = "Сум.?"; НовПБО.Тип = "Число";
//оРазд = 10;

    Если мОтбора = Неопределено Тогда
        мОтбора = Истина;//Первичная Инициализация
    ИначеЕсли Не ВклОтбора Тогда
        Для каждого ЭлмПБО Из СпПБО Цикл
            ЭлементыФормы["т"+ЭлмПБО.Значение].Высота   = 0;
            ЭлементыФормы["т"+ЭлмПБО.Значение].Видимость = Ложь;
            ЭлементыФормы["З"+ЭлмПБО.Значение].Высота   = 0;
            ЭлементыФормы["З"+ЭлмПБО.Значение].Видимость = Ложь;
        КонецЦикла;
        //Все Поля Скрыты
        ЭлементыФормы.ДокументСписок.Верх = 33;
        ЭлементыФормы.ДокументСписок.Высота = ЭтаФорма.Высота-40;
        Возврат;
    КонецЕсли;
    //Отработка инициализации
    НПП = 1;
    Для каждого ЭлмПБО Из СпПБО Цикл
        Если ЭлементыФормы.ДокументСписок.Ширина<оЛево+160+СтрДлина(ЭлмПБО.Представление) Тогда
            ЭлементыФормы.ДокументСписок.Ширина = ЭлементыФормы.ДокументСписок.Ширина+160+СтрДлина(ЭлмПБО.Представление);
        КонецЕсли;
        РазместитьПолеБО(ЭлементыФормы, ЭлмПБО.Значение, ЭлмПБО.Представление, ЭлмПБО.Тип, 19, оВерх, оЛево);
        Если НПП=1 Тогда
            ЭлементыФормы["з"+ЭлмПБО.Значение].СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша._1, Истина); // Alt+1
        ИначеЕсли НПП=2 Тогда
            ЭлементыФормы["з"+ЭлмПБО.Значение].СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша._2, Истина); // Alt+2
        ИначеЕсли НПП=3 Тогда
            ЭлементыФормы["з"+ЭлмПБО.Значение].СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша._3, Истина); // Alt+3
        ИначеЕсли НПП=4 Тогда
            ЭлементыФормы["з"+ЭлмПБО.Значение].СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша._4, Истина); // Alt+4
        ИначеЕсли НПП=5 Тогда
            ЭлементыФормы["з"+ЭлмПБО.Значение].СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша._5, Истина); // Alt+5
        ИначеЕсли НПП=6 Тогда
            ЭлементыФормы["з"+ЭлмПБО.Значение].СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша._6, Истина); // Alt+6
        ИначеЕсли НПП=7 Тогда
            ЭлементыФормы["з"+ЭлмПБО.Значение].СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша._7, Истина); // Alt+7
        КонецЕсли;
        НПП=НПП+1;
    КонецЦикла;

    //Подвинем Список
    ЭлементыФормы.ДокументСписок.Высота = ЭлементыФормы.ДокументСписок.Высота - оВысота;
    ЭлементыФормы.ДокументСписок.Верх = ЭлементыФормы.ДокументСписок.Верх + оВысота;
КонецПроцедуры

//НВЮ/ Отбираем ПБО
Процедура ПБОПриИзменении(Элемент)
    ИскЗначение = Элемент.Значение;
    Если ЗначениеЗаполнено(ИскЗначение) Тогда
        Если Элемент.Ширина<75 Тогда
            Элемент.Ширина=75;
        КонецЕсли;
        Если Лев(СокрЛП(ТипЗнч(ИскЗначение)),6)="Строка" Тогда
            Отбор[Сред(Элемент.Имя,2)].Значение = ИскЗначение;
            Отбор[Сред(Элемент.Имя,2)].ВидСравнения = ВидСравнения.Содержит;
        ИначеЕсли Лев(СокрЛП(ТипЗнч(ИскЗначение)),5)="Число" Тогда
            Отбор[Сред(Элемент.Имя,2)].ВидСравнения = ВидСравнения.ИнтервалВключаяГраницы;
            Отбор[Сред(Элемент.Имя,2)].ЗначениеС = ИскЗначение*0.98;
            Отбор[Сред(Элемент.Имя,2)].ЗначениеПо = ИскЗначение*1.02;
        Иначе
            Отбор[Сред(Элемент.Имя,2)].Значение = ИскЗначение;
            Отбор[Сред(Элемент.Имя,2)].ВидСравнения=ВидСравнения.Равно;
        КонецЕсли;
        Отбор[Сред(Элемент.Имя,2)].Использование=Истина;
    Иначе
        Отбор[Сред(Элемент.Имя,2)].Использование=Ложь;
    КонецЕсли;
    Если Отбор[Сред(Элемент.Имя,2)].Значение<>ИскЗначение Тогда
        ЭтаФорма.Обновить();
    КонецЕсли;
    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ДокументСписок;
КонецПроцедуры
//НВЮ/ Очищаем ПБО+
Процедура ПБООчистка(Элемент, СтандартнаяОбработка)
    Отбор[Сред(Элемент.Имя,2)].Использование=Ложь;//По имени Элемента отключаем отбор
    Если Отбор[Сред(Элемент.Имя,2)].Значение<>Элемент.Значение Тогда
        ЭтаФорма.Обновить();
    КонецЕсли;
    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ДокументСписок;
КонецПроцедуры
//НВЮ/ Универсальное Размещение Поля отбора
//Параметры:
//  ЭФ  - <ЭлементыФормы>   - Размещение Элементов Формы
//
Процедура РазместитьПолеБО(ЭФ, ИмяПБО, ПредставлениеПБО, ТипПБО, оВысота=19, оВерх, оЛево) Экспорт
    тЗаг = ЭлементыФормы.Найти("т"+ИмяПБО);
    Если тЗаг=Неопределено Тогда
        тЗаг = ЭлементыФормы.Добавить(Тип("Надпись"),"т"+ИмяПБО,Истина);
        тЗаг.Значение = ПредставлениеПБО;
    Иначе
        тЗаг.Видимость = Истина;
    КонецЕсли;
    тЗаг.Верх = оВерх;
    тЗаг.Лево = оЛево;
    тЗаг.Ширина = СтрДлина(ПредставлениеПБО)*8;
    оЛево   = оЛево + тЗаг.Ширина;
    тЗаг.Высота = оВысота;
    тЗаг = ЭлементыФормы.Найти("З"+ИмяПБО);
    Если тЗаг=Неопределено Тогда
        тЗаг = ЭлементыФормы.Добавить(Тип("ПолеВвода"),"З"+ИмяПБО,Истина);
        тЗаг.УстановитьДействие("ПриИзменении",Новый Действие("ПБОПриИзменении"));
        тЗаг.УстановитьДействие("Очистка",Новый Действие("ПБООчистка"));
    Иначе
        тЗаг.Видимость = Истина;
    КонецЕсли;
    тЗаг.Верх = оВерх;
    тЗаг.Лево = оЛево;
//  ТипПБО  = СокрЛП(ТипЗнч(ЭлементыФормы.ДокументСписок.Колонки[ИмяПБО].ЭлементУправления.Значение));
    Если ТипПБО="Строка" Тогда
        тЗаг.Ширина = 75;
        тЗаг.ТипЗначения = ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(10);
    ИначеЕсли ТипПБО="Число" Тогда
        тЗаг.Ширина = 110;
        тЗаг.ТипЗначения = ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(14,2);
    Иначе
        тЗаг.Ширина = 130;
        тЗаг.ТипЗначения = ОбщегоНазначения.ПолучитьОписаниеТиповСправочника(ТипПБО);//
    КонецЕсли;
    оЛево   = оЛево + тЗаг.Ширина + 10;//НВЮ/ Добавлен разделитель полей
    тЗаг.Высота = оВысота;
    тЗаг.КнопкаОчистки = Истина;
    тЗаг.ПропускатьПриВводе = Истина;

КонецПроцедуры
//НВЮ/ Включение/Отключение Быстрого отбора
Процедура ДействияФормыБыстрыйОтбор(Кнопка)
    Если мОтбора Тогда//Включен, сл. Выключаем совсем
        БыстрыйОтборДок(Ложь);
        мОтбора = Ложь;
        ЭлементыФормы.ДокументСписок.Верх = 33 ;//Типовое Расположение
        ЭлементыФормы.ДокументСписок.Высота = ЭтаФорма.Высота - 33;
    Иначе   //Включаем (Отображаем) Быстрый Отбор
//      мОтбора=ТекущаяДата();
        БыстрыйОтборДок(Истина);
        мОтбора = Истина;
    КонецЕсли;
КонецПроцедуры

 

Интерфейс Толстого клиента Типовые конфигурации

См. также

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    14799    18    4    

25

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

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

6000 руб.

18.01.2022    7686    1    2    

6

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

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

6000 руб.

16.01.2015    59954    40    57    

77

Редактор граф

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

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

1500 руб.

06.10.2020    8762    6    7    

8

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    7398    141    acces969    31    

106

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    2105    kalyaka    2    

19

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    10530    1    5    

9

Программный интерфейс для доработки форм

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

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

25.11.2021    7787    AtamanovYS    19    

130
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1605 11.01.16 08:10 Сейчас в теме
Осталось вынести процедуры генерации элементов и обработки событий в общий модуль,
выгрузить файлы конфигурации и обработать тексты модулей форм.
А вообще, идея - не нова: http://infostart.ru/public/152560/, но не особо прижилась, судя по количеству "Лайков"...
2. nixel 1349 13.01.16 14:48 Сейчас в теме
Толстый клиент <> Обычное приложение.

Не проще конструктором сгенерить управляемую форму списка?
И весь компоновщик настроек с быстрыми/небыстрыми отборами дает вам сама платформа.
4. Altair777 644 29.08.17 17:19 Сейчас в теме
(2) любопытно, а что Вы имеете в виду? Через "Найти"?
5. nixel 1349 30.08.17 01:00 Сейчас в теме
(4) через "Настроить список". и вынесение установленных настроек в "Быстрый доступ"
3. V.Nikonov 119 13.01.16 21:58 Сейчас в теме
Я не парясь копировал фрагмент кода... Вставлял в нужную форму подправляя Автозапуск и требуемые реквизиты отбора в Процедуре БыстрыйОтборДок()... 10 или 15 форм списков обтяпал за час.
Идея централизованного хранения параметров панели быстрого отбора теплилась, но так и не родилась... Времени и финансирования не хватило.
Оставьте свое сообщение