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

09.01.16

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Описание доработок с Кодом
.docx 35,09Kb ver:1
0
0 Скачать (1 SM) Купить за 1 850 руб.

Для документов чрезвычайно удобным оказывается динамический интервал даты документа (Последние 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 Платные (руб)

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

6000 руб.

16.01.2015    63057    44    59    

82

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

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

2400 руб.

29.06.2020    18926    26    6    

41

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

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

1500 руб.

06.10.2020    10291    7    7    

10

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

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

20.08.2024    17400    mrXoxot    43    

121

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

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

27.05.2024    7763    smielka    37    

100

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

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

27.12.2023    15063    946    elcoan    49    

117

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

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

2 стартмани

10.04.2023    11990    162    acces969    31    

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

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