Black Friday: Cashback 35% при покупке 1С лицензий на счет INFOSTART.RU

Примитивное оглавление по колонке таблицы

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

Разработка - Практика программирования

Таблица формы оглавление алфавитный указатель отбор в таблице

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

Это, честно говоря, фрагмент одной большой задачи, но сделанный для себя, просто для удобства работы с большим объёмом данных.

Что умеет: индексирует указанную колонку коллекции, беря первые символы, и потом по ним устанавливает отбор строк. Символы рассматривает любые, т.к. ориентируется на переданное "оглавление" - строку тех символов, по которым будут сделаны листы оглавления. Если символа в оглавлении нет, он попадёт в раздел "Все". Если символ есть, он попадёт в один из блоков оглавления. Размер блока регулируется. Можно многократно пересоздавать, можно задавать несколько оглавлений (русское и английское, например).

Создаётся выпадающее подменю, состоящее из блоков. При щелчке выполняется отбор всех строк, у которых первый символ входит в блок. Имеющиеся другие отборы строк по возможности оставляются без изменений.

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

Исходный код:

// Анализирует оглавление и подключает его использование к полю коллекции (желательно вызывать при инициализации
// или перезаполнении обрабатываемой коллекции), заполняет/перезаполняет список блоков оглавления.
//
// Параметры:
//    рИмяКоллекции - имя реквизита формы типа ДанныеФормыКоллекция, имеющего одноимённый элемент формы "таблица";
//    рИмяПоля - имя реквизита (колонки) коллекции; подразумевается, что есть элемент формы, чьё имя составлено по общим правилам;
//    рВсеОглавления - строка со списком "заглавных" символов, разделённых при необходимости знаком "|", например, буквы алфавита;
//    рРазмерБлока - число, размер фрагмента оглавления; например, при 4 будет А-Г, Д-Ж итд); по умолчанию равен 4.
//
&НаКлиенте
Процедура ДобавитьОглавлениеПоля(рИмяКоллекции,рИмяПоля,рВсеОглавления,рРазмерБлока=0)
    мОглавлений=СтрРазделить(рВсеОглавления,"|");
    //
    рРазмерБлока=?(рРазмерБлока=0,4,рРазмерБлока);
    //
    мБлоков=Новый Массив;
    соотПервыхСимволов=Новый Соответствие;
    //
    Для ыыы=0 По мОглавлений.Количество()-1 Цикл
        рОглавление=мОглавлений.Получить(ыыы);
        рДлина=СтрДлина(рОглавление);
        пози=1; 
        Пока Истина Цикл
            ОбработкаПрерыванияПользователя();
            рБлок=Сред(рОглавление,пози,рРазмерБлока);
            пози=пози+рРазмерБлока;
            рПервыйСимвол=Лев(рБлок,1);
            Для й=2 По рРазмерБлока Цикл
                соотПервыхСимволов.Вставить(Сред(рБлок,й,1),рПервыйСимвол);
            КонецЦикла;
            мБлоков.Добавить(Новый Структура("НомерОглавления,Блок",ыыы,рБлок));
            Если пози>=рДлина Тогда Прервать КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    //
    ДобавитьИндексноеПолеОглавленияИМеню(рИмяКоллекции,рИмяПоля,соотПервыхСимволов,мБлоков);
КонецПроцедуры    
// Добавляет колонку с индексом (первым символом) для отборов оглавления, и элементы формы для его меню;
// является вспомогательной для ДобавитьОглавлениеПоля и не рассчитана на самостоятельный вызов.
&НаСервере
Процедура ДобавитьИндексноеПолеОглавленияИМеню(рИмяКоллекции,рИмяПоля,соотПервыхСимволов,мБлоков)
    Попытка
        мрек=Новый Массив;
        мрек.Добавить(Новый РеквизитФормы(рИмяПоля+"_ИПО",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(1)),рИмяКоллекции));
        ИзменитьРеквизиты(мрек);
    Исключение
    КонецПопытки;
    //
    рКоллекция=ЭтаФорма[рИмяКоллекции];
    Для каждого стро Из рКоллекция Цикл
        сим=Лев(стро[рИмяПоля],1);
        соотсим=соотПервыхСимволов.Получить(сим);
        Если соотсим=Неопределено Тогда соотсим=сим КонецЕсли;
        стро[рИмяПоля+"_ИПО"]=соотсим;
    КонецЦикла;
    
    заг=Элементы[рИмяКоллекции+рИмяПоля].Заголовок;
    преф="ИПО_"+рИмяКоллекции+"_"+рИмяПоля+"_";
    грэл=Элементы.Найти("ИПО_Вызовы_"+рИмяКоллекции);
    Если грэл=Неопределено Тогда
        грэл=Элементы.Добавить("ИПО_Вызовы_"+рИмяКоллекции,Тип("ГруппаФормы"),Элементы[рИмяКоллекции+"КоманднаяПанель"]);
        грэл.Вид=ВидГруппыФормы.Подменю;
        грэл.Заголовок="Оглавление"+?(ПустаяСтрока(заг),""," ("+заг+")");
    КонецЕсли;        
    //
    ком=ЭтаФорма.Команды.Найти(преф);
    Если ком=Неопределено Тогда
        ком=ЭтаФорма.Команды.Добавить(преф);
        ком.Действие="ОтобратьБлокПоОглавлению";
        ком.Отображение=ОтображениеКнопки.Текст;
    КонецЕсли;
    эл=Элементы.Найти(ком.Имя);
    Если эл=Неопределено Тогда
        эл=Элементы.Добавить(ком.Имя,Тип("КнопкаФормы"),грэл);
        эл.Вид=ВидКнопкиФормы.КнопкаКоманднойПанели;
        эл.ИмяКоманды=ком.Имя;
        эл.Заголовок="Все";
        эл.Пометка=Истина;
    КонецЕсли;    
    //
    Для каждого рБлок Из мБлоков Цикл
        Попытка
            рПервыйСимвол=Лев(рБлок.Блок,1);
            ком=ЭтаФорма.Команды.Добавить(преф+СокрЛП(рБлок.НомерОглавления)+"_"+рПервыйСимвол);
            ком.Действие="ОтобратьБлокПоОглавлению";
            ком.Отображение=ОтображениеКнопки.Текст;
            эл=Элементы.Добавить(ком.Имя,Тип("КнопкаФормы"),грэл);
            эл.Вид=ВидКнопкиФормы.КнопкаКоманднойПанели;
            эл.ИмяКоманды=ком.Имя;
            эл.Заголовок=рПервыйСимвол+" - "+Прав(рБлок.Блок,1);
        Исключение
        КонецПопытки;        
    КонецЦикла;
КонецПроцедуры
// Вызывается командами, созданными для каждого пункта меню оглавления, выполняет установку и снятие отбора
&НаКлиенте
Процедура ОтобратьБлокПоОглавлению(Команда)
    мстро=СтрРазделить(Команда.Имя,"_");
    рИмяКоллекции=мстро.Получить(1);
    рИмяПоля=мстро.Получить(2);
    Если мстро.Количество()=4 Тогда
        сим="";
    Иначе
        сим=мстро.Получить(4); // третьим идёт номер оглавления
    КонецЕсли;
    
    грэл=Элементы.Найти("ИПО_Вызовы_"+рИмяКоллекции);
    Для каждого эл Из грэл.ПодчиненныеЭлементы Цикл
        Если ТипЗнч(эл)=Тип("КнопкаФормы") Тогда эл.Пометка=Ложь КонецЕсли;
    КонецЦикла;
    
    отб=Новый Структура;
    отбСтарый=Элементы[рИмяКоллекции].ОтборСтрок;
    Если ТипЗнч(отбСтарый)<>Тип("ФиксированнаяСтруктура") Тогда отбСтарый=Новый Структура КонецЕсли;
    Для каждого киз Из отбСтарый Цикл отб.Вставить(киз.Ключ,киз.Значение) КонецЦикла;
    Если ПустаяСтрока(сим) Тогда // все пункты
        Попытка отб.Удалить(рИмяПоля+"_ИПО") Исключение КонецПопытки;
    Иначе
        отб.Вставить(рИмяПоля+"_ИПО",сим);
    КонецЕсли;
    Элементы[рИмяКоллекции].ОтборСтрок=Новый ФиксированнаяСтруктура(отб);
    
    Элементы[Команда.Имя].Пометка=Истина;
КонецПроцедуры

 

Пример вызова:

Оглавления="abcdefghijklmnopqrstuvwxyz|ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ДобавитьОглавлениеПоля("ТаблицаПроизводителей", "Название", Оглавления);
22

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

Комментарии
Избранное Подписка Сортировка: Древо
1. dj_serega 368 13.07.16 10:47 Сейчас в теме
Я так понял используется последняя версия 1С?
2. Yashazz 2905 13.07.16 14:45 Сейчас в теме
(1) dj_serega, достаточно заменить СтрРазделить на общемодульную РазложитьСтрокуВМассивПодстрок, и всё остальное заработает на любой 8.3 и, думаю, 8.2
dj_serega; +1 Ответить
Оставьте свое сообщение

См. также

Полезные процедуры и функции для программиста 160

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

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

07.10.2019    11506    HostHost    23       

Cashback 35% при покупке 1С лицензий на счет INFOSTART.RU с 27.11 по 04.12 Промо

Оформляете заказ на 1С лицензии или конфигурации. Получаете 35% от стоимости на счет в профиле INFOSTART.RU. Выбираете сервисы и продукты на сумму кэшбэка.

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Агрегатные функции СКД, о которых мало кто знает 353

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

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    15415    ids79    44       

Три костыля. Сказ про фокусы в коде 124

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

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    10468    YPermitin    69       

Онлайн-курс "Технология выполнения проектов ERP-класса – процессный подход". Третий поток. Курс проходит с 21 января по 18 марта 2020 года. Промо

Курс разработан Внедренческим центром «Раздолье». Курс предназначен для подготовки аналитиков, архитекторов и руководителей проектов автоматизации процессов управления с использованием комплексных ИТ-систем (1С:ERP, 1С:УХ, 1С:КА, 1С:УТ). В основе курса лежит методика применения процессного подхода.

9000 рублей

Отслеживание выполнения фонового задания 143

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

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

17.08.2019    12595    ids79    16       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 261

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

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    17795    ids79    31       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

Фоновое выполнение кода в 1С - это просто 124

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

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

02.08.2019    12689    avalakh    21       

Специальное предложение по 1С:Документооборот 8! Промо

Оперативно навести порядок в документообороте? Легко! Воспользуйтесь специальным предложением! Внедрение за 2 недели! Фиксированная цена и гарантия результата!

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты 141

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

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    15960    ids79    8       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ 155

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    13506    ids79    27       

Перенос документов и справочников ERP 2 / КА 2 / УТ 11 => БП 3.0 Промо

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

19700 руб.

Регистры сведений. За кулисами 129

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

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

09.07.2019    10532    YPermitin    12       

"Меньше копипаста!", или как Вася универсальную процедуру писал 183

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

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    9308    SeiOkami    49       

Перенос данных КА 1.1 / УПП 1.3 => БП 3.0 (перенос остатков, документов и справочников из "1С:Комплексная автоматизация 1.1" / УПП 1.3 в "1С:Бухгалтерия 3.0"). Обновлен до версий КА 1.1.115.х, УПП 1.3.127.х! Промо

Разработка позволяет перенести остатки по всем счетам бух.учета в программу "1С:Бухгалтерия предприятия 8", ред. 3.0 на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Правила оперативно обновляю при выходе новых релизов. Рассылка обновлений правил бесплатно в течение 12 месяцев. Есть видеодемонстрация проведения переноса данных. Конфигурации при использовании обмена остаются полностью типовыми. Перенос данных возможен в Бухгалтерию 3.0 версии ПРОФ, КОРП или базовую.

24700 руб.

Создание отчетов с помощью СКД - основные понятия и элементы 216

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

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    23624    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 179

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

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    13572    dmurk    134       

Очный семинар по регулярному менеджменту Александра Фридмана "Вы или Хаос", 12 декабря 2019 г. , Санкт-Петербург Промо

Семинар по регулярному менеджменту от Александра Фридмана для собственников, первых лиц и топов. Технология управленческого планирования, комплексного управления временем и другими ресурсами, выполнением поручений, делами, информацией, контактами (встречи-звонки-почта).

от 11000 до 29000 рублей

Регистры накопления. Структура хранения в базе данных 178

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

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

16.05.2019    21030    YPermitin    27       

Выполнение внешней обработки в фоновом задании 149

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

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    12924    Eret1k    23       

Перенос данных КА 1.1 => ERP 2 (ЕРП) (обработка переноса документов, остатков и справочной информации из "1С:Комплексная автоматизация, ред. 1.1" в "1С:ERP Управление предприятием, ред 2"). Обновлен до КА 1.1.115.х и ERP 2.4.10.х Промо

Обработка позволяет переносить из КА 1.1 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления в случае выхода новых релизов конфигураций 1С.

29700 руб.

Выгрузка документа по условию 5

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

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    7312    m-rv    2       

Как прикрутить ГУИД к регистру сведений 23

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

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

16.04.2019    9871    m-rv    16       

Перенос данных БП 2.0 => УТ 11 / КА 2 / ERP 2 (перенос остатков, документов и справочников из "1С:Бухгалтерия предприятия 8", ред. 2.0 в "1С:Управление торговлей 8", ред.11 / КА 2 / ERP 2). Обновлено до УТ 11.4.10.х, КА 2.4.10.х, ERP 2.4.10.х! Промо

Перенос позволяет загрузить в УТ 11 / КА 2 / ERP 2 документы за выбранный период, справочную информацию и остатки по счетам бух. учета. Переносятся остатки денежных средств, взаиморасчетов, остатки товаров и материалов на складах. Переносятся девятнадцать основных видов документов за выбранный период и вся нормативно-справочная информация. Есть фильтр по организации. Если нужно переносить что-то дополнительно, то обычно бесплатно дорабатываю правила (перед покупкой согласуйте необходимые доработки).

29700 руб.

О расширениях замолвите слово... 195

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

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    18864    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах) 202

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

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    15097    ellavs    83       

Перенос документов, остатков и справочников КА 1.1 => КА 2 / УТ 11. Обновлено до КА 2.4.10.х и УТ 11.4.10.х! Промо

Более 130 компаний выполнили переход на КА 2 или УТ 11 с помощью нашей разработки! Позволяет перенести не только остатки и справочники (как типовая обработка), но и документы за нужный период времени. Предоставляем техподдержку, оперативно исправляем замечания, выпускаем обновления при выходе новых релизов программ 1С. Вы можете проверить разработку до покупки: сделаем бесплатный тестовый перенос из вашей базы КА 1.1 и предоставим доступ к базе-результату через веб-клиент!

29700 руб.

Трюки с внешними источниками данных 166

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

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    15840    YPermitin    52       

Вакансия Программист, аналитик, эксперт 1С Промо

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

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 173

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

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    19107    ids79    9