Множественное выделение элементов справочника и работа с ним, как в 8.Х

15.02.23

Задачи пользователя - Подбор и обработка объектов

Работа с выделенными (множественное выделение) строками в 7.7, как в восьмерке - перенос в другую группу, установка/снятие пометки удаления, групповая установка реквизитов.

Скачать исходный код

Наименование Файл Версия Размер
Множественное выделение элементов справочника и работа с ним, как в 8.Х:
.rar 508,64Kb
1
.rar 508,64Kb 1 Скачать

Понравилось, как это работает в восьмерке, и захотелось сделать нечто аналогичное в 7.7.

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

Но, с помощью Formex, можно решить многие интерфейсные задачи, которые штатными средствами не решаются.

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

UPD 04.02.2022 - Теперь можно выделять просто щелкнув мышью на нужной строке при зажатом Шифт, двойной клик не требуется. см. комментарий от сегодня(требуется еще одна ВК - файл демо-примера разработки обновлен, ВК в составе). Так как-то более привычно, как в любых списках виндовс штатно работает, так теперь и в 7.7...

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

Во вложении zip архив демо-базы, целиком, вместе с Formex, как есть, весь каталог (не выгрузкой из конфигуратора).

Работает на любой компоненте. Тестировалось на релизе 7.70.27

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

В видеоролике(с экрана): https://cloud.mail.ru/public/3dZd/zya9VpWun я продемонстрировал, как это работает.   

 

Множественное выделение строк работа со справочником как в восьмерке

См. также

Объединение заявок покупателя в Комплексной конфигурации 1с 7.7

Подбор и обработка объектов Платформа 1С v7.7 1С:Комплексная 7.7 Управленческий учет Абонемент ($m)

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

1 стартмани

14.02.2022    4458    1    ksnik    2    

1

Перенос элементов справочника из одной группы в другую

Подбор и обработка объектов Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

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

10 стартмани

07.04.2021    6925    5    softmaker    0    

1

Улучшенная обработка документов для 7.7

Подбор и обработка объектов Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

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

1 стартмани

16.12.2016    12161    4    uus    0    

1

Увеличение разрядности справочника

Подбор и обработка объектов Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка нового кода после увеличения разрядности справочника

1 стартмани

19.11.2015    6657    1    atr12    1    

0

Разбиение документа на несколько

Подбор и обработка объектов Платформа 1С v7.7 1С:Бухгалтерия 7.7 Абонемент ($m)

Разбиение документа на несколько

1 стартмани

23.08.2014    9161    5    kitminsk    5    

0
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 302 10.01.23 16:07 Сейчас в теме
Подумалось...
Вам понравились некоторые вещи в восьмерке и вы их перенесли в семерку.
А нам, восьмерочникам, нравятся некоторые вещи в семерке.

Например, более простая модель работы с субд.
Если написать некую обертку на odbc для mysql по аналогии с объектами 7.7, то можно будет в файловой восьмерке работать с субд.
Что особенно насущно для автономного сервера, который может работать как служба в файловом варианте.
Особенно это интересно, если учитывать бесплатность автономного сервера.
2. M_W_W 30 10.01.23 16:27 Сейчас в теме
На самом деле, платформа восьмерки мне очень нравится. Там очень много сделано хорошо.
Но, типовые конфигурации - это тихий ужОс...
Такое ощущение, что специально делают для всех и не для кого...
Дописывать чего-то свое - нужна нормальная основа, от чего оттолкнуться. А ничего из типового мне не нравится - алергия на все их безобразия :-(
Ну разве что бухгалтерия 3.0 более-менее нормальная, но, это не мой профиль.
Писать чего-то свое с нуля - это утопия, не потянуть, нужна команда.
Поэтому и продолжаю существовать на 7.7, потихоньку допиливая свою конфу на основе ТиС 9.2... Для задач моих клиентов(99% мелкие розничные магазинчики, как говорит Злопчинский - "лавочники" :-) ) - более чем. По принципу того анекдота:
"Вам шашечки, или ехать?"
Сейчас у меня там есть практически все, что необходимо... Вот "облизывался" на множественное выделение строк, как в 8.Х, сделал.... Полнотекстовый поиск добавил чуть раньше. В общем-то, не вдаваясь в потроха работы с СУБД и масштабируемость решений(тут 8.Х не догнать), но, моим это и не нужно.
Что касается конфы - то есть все - и полный контур работы с ЕГАИС, и с маркировкой, и с ЭДО(через файлы)...
3. Steelvan 302 10.01.23 17:12 Сейчас в теме
А много людей на 7.7 еще работает ?
А как с обновлениями форм оф. документов ?
Обновления для 7.7 еще выпускаются ?
4. Steelvan 302 10.01.23 17:30 Сейчас в теме
Я правильно понимаю, что у вас по ТиС хороший опыт ?

Просто у нас есть такая задача в ближайшей перспективе, как переписка ТиС на php код для создания некоторой базы для веб-магазинов.
Если будут вопросы по ТиС, к вам можно обращаться ?
Почем совещания ?
5. M_W_W 30 10.01.23 20:51 Сейчас в теме
А какие оф. формы документов в розничной торговле?
Кассы у меня в отдельных кассовых программах(УКМWIN), соответственно чеки они печатают.
Алкогольную декларацию я сам изначально писал, и соответственно поддерживаю в актуальном состоянии.
НДС у моих клиентов нет, соответственно гимороя с печатными формами нет. Ааа, нет, УПДшка понадобилась для возвратов поставщикам, тут чью-то скачал и адаптировал под свою конфу...
Я никаких обновлений от 1С не ставил уже лет 10... Только то, что сам дорабатываю.

Обращайтесь, если смогу чем-то помочь - помогу.
6. M_W_W 30 10.01.23 22:10 Сейчас в теме
При внедрении в рабочую конфигурацию, выявилось то, что не видно было в демке - при разных способах сортировки(Наименование, Код, Реквизит) заданных интерактивно в форме списка справочника, не всегда корректно выделялись несколько элементов "подряд". Исправил, теперь работает правильно при любой сортировке. Перекачайте, кто скачал.
7. M_W_W 30 11.01.23 22:09 Сейчас в теме
Еще немного допилил.
Заблокировал возможность при выборе нескольких элементов "подряд" - выбором первого и последнего из необходимых, выбирать второй элемент находящийся в списке "выше" первого выбранного. Иначе, при таком действии выбирались все элементы от первого выбранного и до конца списка элементов в группе.
Пофиксил. Файл обновил, перекачайте, если кто-то скачал предыдущую версию.

PS Можно конечно, при таком действии организовать выборку элементов а обратном порядке, снизу- в верх, до второго выбранного, но, думаю оно того не стоит, не буду этого делать - и так пойдет... Тем более, отлаживать это решение отладчиком - не получается, так, как выделение строк осуществляется с нажатой клавишей "Шифт", из-за чего отладчик не "шагает"(вместо F8 получается комбинация Шифт+F8), а через меню, мышкой, пунктом меню "шагнуть в" тоже не особо получается отрабатывает процедура "при отжатии левой кнопки мыши", и уводит отладчик "не туда"...
Можно конечно отлаживать "по старинке", как в те времена, когда не было отладчика - навтыкать везде предупрежений/сообщений, но оно того не стоит.
Поэтому - вариант окончательный.
8. M_W_W 30 11.01.23 23:20 Сейчас в теме
(7)
Можно конечно, при таком действии организовать выборку элементов а обратном порядке, снизу- в верх, до второго выбранного, но, думаю оно того не стоит, не буду этого делать - и так пойдет...

И все-таки, я это сделал :-)
Работает в любом направлении, и вниз и вверх.
Видеоролик с экрана: https://cloud.mail.ru/public/EfwB/ab7QipzHp
Файл перезалил.
9. M_W_W 30 12.01.23 17:26 Сейчас в теме
"Гладко было на бумаге, да забыли про овраги" :-)
Хорошо на "Мисте" добрые люди подсказали.
В демке, в справочнике "Номенклатура", не было реквизитов с установленной "галочкой" отбор, соответственно не было кнопок отбора в панели инструментов справочника.
А в рабочей конфе - есть. Попробовал - фигня полная получается с установленным отбором, в список выбранных попадает много лишних элементов, которые на экране не видны, так, как в отбор не попадают.
Пофиксил.
Файл перезалил, теперь в базе есть пара групп дополнительных, по которым можно проверить отбор(галочка "Алкоголь"). В рабочей базе тоже работает нормально.
10. M_W_W 30 03.02.23 20:16 Сейчас в теме
Нашел старенькую ВК от trdm - KeyState.
Она, а отличии от Formex, не событие нажатия/отжатия клавиши ловит, а выводит ее текущее состояние.
Так, стало проще определять, нажата клавиша Шифт или нет. Раньше, приходилось считать нажатия/отжатия.
Код немного упростился, стал более понятным.
И придумал, как "ловить" событие позиционировании на строке формы списка справочника. Теперь, выбираются строки просто одинарным щелчком мыши на нужной строке с нажатым Шифт. Не нужно двойной щелчек делать. Как-то более понятно, как во всех виндовых списках :-)
Через ложное закрытие формы, вот так:

Перем ЛожнЗакр;

Процедура ПриНажатииЛевойКнопки(Сост, Гор, Верт, ФСО)
    Шифт = "";
    рез = глНажатаКлавишаШифтКонтролАльт(, Шифт); // в глобальном модуле функция от trdm, из текстовика к ВК, как есть, без изменений.
    Если Шифт = 1 Тогда
        ЛожнЗакр = 1;
        Форма.Закрыть();
    КонецЕсли;    
КонецПроцедуры

Процедура ОбработатьВыборСтроки()
    ВыбЭлемент    = ТекущийЭлемент();
        // Здесь, можем дальше делать что хотим с ВыбЭлемент - он будет тем, который выделен последним в списке справочника, без двойного щелчка.
КонецПроцедуры

Процедура ПриЗакрытии()
    Шифт = "";
    рез = глНажатаКлавишаШифтКонтролАльт(, Шифт);
    Если Шифт = 1 Тогда    
         ОбработатьВыборСтроки();
         Если ЛожнЗакр = 1 Тогда
             ЛожнЗакр = 0;
             СтатусВозврата(0);
             Возврат;
         КонецЕсли;
     КонецЕсли;    
КонецПроцедуры
Показать


Если это кому-то интересно, могу обновленную демку выложить...
11. M_W_W 30 04.02.23 12:23 Сейчас в теме
Обновил демку. ВК от trdm - внутри. Требует регистрации в системе с помощью regsvr32.
Вот обновленный видеоролик: https://cloud.mail.ru/public/3dZd/zya9VpWun
12. M_W_W 30 04.02.23 15:51 Сейчас в теме
Кому интересно - можно в конец модуля формы списка справочника добавить такую процедуру:

Процедура ПриНажатииКнопкиКлавиатуры(КодКл, Альт, Шифт, Сонтр, ТекСимв, ФСО)
    КолНажСтрелок    = 0;
    Если (Шифт = 1) И (КодКл = 13) Тогда
        ФСО             = 0;
        ЛожнЗакр         = 1;
        Форма.Закрыть();
        КолНажСтрелок    = 0;
    ИначеЕсли (Шифт = 0) И (КодКл = 13) Тогда
        ОчиститьВыделение();
        КолНажСтрелок    = 0;
    ИначеЕсли (Шифт = 1) И ((КодКл = 38) Или (КодКл = 40)) Тогда
        КолНажСтрелок     = КолНажСтрелок + 1;
        Если КолНажСтрелок = 1 Тогда
            СзВыб.ДобавитьЗначение(ТекущийЭлемент());
        КонецЕсли;
        ЛожнЗакр         = 1;
        Форма.Закрыть();        
    КонецЕсли;    
КонецПроцедуры
Показать

Тогда будут работать "стрелки" клавиатуры и ентер, для тех, кто не любит мышкой работать, а предпочитает все делать с клавиатуры.

Единственное, немного подтормаживает на больших базах при первом выборе нескольких строк подряд стрелками... Где-то на пару секунд задумывается на базе, в которой около 100 000 товаров... И то, только при первом нажатии на стрелку с зажатой Шифт. Потом, хоть сколько подряд выделяй, этого эффекта нет, все выделяется мгновенно, видимо выборка из справочника где-то кешируется.
13. M_W_W 30 05.02.23 16:13 Сейчас в теме
Еще одна "доработка", это уже из серии - "когда коту делать нечего, он... сами знаете, что делает" :-)
Приблизил еще поведение окна ФормыСписка справочника 7.7 к стандартному поведению окна списка чего-либо Windows.
Теперь, если относительно первой выбранной позиции нажимаешь стрелку вниз, с зажатым Шифт, позиции ниже выделяются. Если нажав несколько раз вниз, потом начать нажимать вверх, выделение снимается вслед за текущей строкой. При переходе через первую позицию, начинают строки выделяться вслед за текущей выше первой. Соответственно, если опять начать нажимать вниз, то выделение вслед за текущей строкой снимается. В общем, все как в стандартных списках винды. В остальном(работа мышью, работа с выделенными строками) ничего не поменялось.
Если не понятно - вот демонстрация(видеоролик с экрана): https://cloud.mail.ru/public/HSar/QpAuSEViH

Файл демоПримера обновил.
14. M_W_W 30 15.02.23 13:00 Сейчас в теме
15.02.2023

Полный рефакторинг кода.
При внедрении у клиентов, у которых в справочнике содержится около 100 000 элементов, замечены сильные "тормоза"..
Особенно это проявлялось при отключенной иерархии.
Стал разбираться - и обнаружил у себя "говнокод"...
Для определения направления выборки, я зачем-то перебирал весь справочник :-)
Естественно, на демо-базе тормозов и не могло быть, там товаров кот наплакал(поэтому и не обратил на это внимание ранее), а в реальности - при включенной иерархии 1-2 секунды, при отключенной доходило до 6-8 :-(
Естественно, так оставлять было нельзя - работать невозможно.
Сделал отдельную функцию определения направления выбора, работающую на другом принципе - без перебора элементов справочника.
Ну, и еще некоторые моменты оптимизировал.

Теперь, это работает как и работало(по функционалу), только даже намека на тормоза нет на базе со справочником "Номенклатура" с более 100К позиций :-)
Файл ДемоПримера перезалил. Видео нет смысла выкладывать, там зрительно на демо-базе ничего не поменялось.
15. alyuev 202 16.03.23 12:36 Сейчас в теме
16. alyuev 202 16.03.23 12:40 Сейчас в теме
(10) Мы используем объект из 1cpp для определения статуса Ctrl Alt Shift:

// Процедура заполняет признак состояния доп клавиш (Ctrl,Shift,Alt) в глобальные переменные
Процедура глСтатусКлавиши() Экспорт
Перем Клавиатура;
Попытка
Клавиатура=СоздатьОбъект("1cpp.Клавиатура");
Исключение
глШ=0;
глК=0;
глА=0;
Возврат;
КонецПопытки; //остальные клавиши см. здесь http://msdn.microsoft.com/en-us/library/ms927178.aspx
глШ=Клавиатура.ПолучитьСостояниеКлавиши(Клавиатура.VK_SHIFT);
глК=Клавиатура.ПолучитьСостояниеКлавиши(Клавиатура.VK_CONTROL);
глА=Клавиатура.ПолучитьСостояниеКлавиши(Клавиатура.VK_MENU);
КонецПроцедуры
//
Функция глКАШ() Экспорт глСтатусКлавиши();Возврат глК*100+глА*10+глШ; КонецФункции
17. M_W_W 30 16.03.23 16:01 Сейчас в теме
(16) Хм... Что-то я такого объекта в описании этой ВК не вижу...
Может старая слишком?
Прикрепленные файлы:
18. alyuev 202 16.03.23 20:42 Сейчас в теме
Вот тут упоминание о добавлении этого объекта: "+ объект Клавиатура как в проекте tabledoc" от trad
https://www.1cpp.ru/forum/YaBB.pl?num=1248963712/0#0
19. alyuev 202 16.03.23 20:49 Сейчас в теме
Из документации к ВК TableDoc:

Раздел VI
Класс Клавиатура / Keyboard

Свойства
<ИмяВиртуальнойКлавиши>
Доступ: чтение

Тип: число

Описание: Значение виртуальной клавиши.

Примеры доступа к значениям виртуальных клавиш:
Клавиатура.VK_SHIFT
Клавиатура.VK_CONTROL
Клавиатура.VK_ESCAPE
Клавиатура.VK_UP
Клавиатура.VK_DOWN
С полным списком имен виртуальных клавиш можно ознакомится в MSDN.
Например тут http://msdn.microsoft.com/en-us/library/ms645540.aspx
или тут http://msdn.microsoft.com/en-us/library/ms927178.aspx

Методы
ПолучитьСостояниеКлавиши / GetKeyState
Синтаксис: ПолучитьСостояниеКлавиши(<ВиртКод>, <ВклРежим>)

Параметры: <ВиртКод> - Код виртуальной клавиши.
<ВклРежим> - Возвращаемый. Необязательный. Имеет смысл для переключаемых клавиш таких как CAPS LOCK.
1 - клавиша включена (toggled), 0 - клавиша выключена (untoggled).

Возврашает: Текущее состояние клавиши: 1-нажата, 0-не нажата.

Описание: Позволяет определить состояние любой клавиши. Например в момент обработки события нажатия одной из клавиш.


ПолучитьИмяКлавиши / GetKeyNameText
Синтаксис: ПолучитьИмяКлавиши(<Данные>, <Режим>)

Параметры: <Данные> - Число, в двоичном коде которого: биты 16-23 - сканкод, 24-флаг расширенной клавиатуры.
В качестве значения можно передавать параметр <Данные> клавиатурных событий таких как ПриНажатииКлавиши().

<Режим> - включает режим безразличия к расположению клавиши на клавиатуре.
Например левый или правый CTRL и SHIFT.

Возврашает: Строку-представление имени клавиши.

Описание: Строка может зависеть от текущей локали.
20. M_W_W 30 17.03.23 12:14 Сейчас в теме
(16) Ага, и на моей версии компоненты работает :-)

Плохо, что у меня нет нормального описания... Знал бы, не применял отдельную компоненту...
Может где-то есть нормальный als с описанием всех методов/свойств 1cpp - ?
А то у меня "1C++.als" вроде и не старый, от 25.05.2020, но в нем нет ни слова про объект "Клавиатура"...
Думаю, и много другого есть того, что в алсе не описано.
Оставьте свое сообщение