В нашей организации очень часто менеджеры и бухгалтера, привыкшие чуть что, как в Word или Excel, нажимать Ctrl-Z, часто жаловались, что в 1С-ке отсутствует такая удобная функция. В 1С с помощью предопределенных процедур в модуле формы можно обрабатывать комбинации клавиш.
Я сделала таким образом:
Во-первых, нужно, чтобы система запоминала «последнее состояние», чтобы при нажатии сочетания клавиш было что именно возвращать. Пользователь может удалять строку в табличной части, может добавлять строчку, может редактировать ее — например, поменять цену или количество и т.п.
В модуле формы определим переменную ВременнаяТаблица, в которой будем хранить текущее состояние табличной части, до внесения изменений. Тип переменной, таблица значений, нужно определить тип в теле модуля формы:
ВременнаяТаблица=СоздатьОбъект(«ТаблицаЗначений«);
Теперь осталось только вовремя заполнять ее. Для всех действий, которые может проделать пользователь с табличной частью, пропишем загрузку во временную таблицу. В предопределенных процедурах в модуле формы документа пропишем:
Процедура ПриОкончанииРедактированияСтроки(НовСтр)
Если НовСтр=1 Тогда
ВыгрузитьТабличнуюЧасть(ВременнаяТаблица);
КонецЕсли;
КонецПроцедуры
Процедура ПриУдаленииСтроки()
ВыгрузитьТабличнуюЧасть(ВременнаяТаблица);
КонецПроцедуры //ПриУдаленииСтроки
Теперь собственно, сама процедура обработки нажатия клавиш:
Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Контрол, Символ, ФСО)
// Сообщить(«Код клавиши «+Число(КодКлавиши)); можно обрабатывать и другие комбинации, так можно узнать нужные коды клавиш
Если (Контрол=1) и (КодКлавиши=90) Тогда
Если ПустоеЗначение(ВременнаяТаблица)=0 Тогда
ЗагрузитьТабличнуюЧасть(ВременнаяТаблица);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Данное решение не тормозит, даже если в документе по 100 строк. Возможно, кому-нибудь пригодится.




и это, отформатируйте статью — ничерта не видать
Ну и самое главное, вы забыли упомянуть некоторый момент — загрузку ВК formex.dll, без которой это усё не возможно.
Спасибо, отформатировала, понадеялась, что местный Insert Code нормально сработает. Если честно, нечасто здесь пишу, все особенности инфостартовского редактора не знаю.
formex.dll — это да, без него все вышеописанное было бы невозможно,
в глобальном модуле в процедуре ПриНачалеРаботыСистемы() нужно обязательно прописать загрузку компоненты
ЗагрузитьВнешнююКомпоненту(«FormEx.dll»);
Да, еще, у тебя не всё «ловит»:
сортировку строк, обработку подбора.. + «запоминание» только последнего действия.
Смотри мою поделку — запоминает все реквизиты формы, + все действия «по кругу».
Если бы щас доделывал бы — всё запихнул бы в один файл — и класс и его подключение и вк.
Лень.
а у нас просто этими кнопками в принципе не пользуются, я даже про них и не подумала. На будущее буду знать.
Надо поддерживать «женскую» составляющую.. Без них совсем здесь скучно будет.
не дрейфь.. и всё получится.
Хорошая идея. Только, как это будет работать, если в табличной части N тысяч строк? Было бы лучше запоминать состояние текущей строки.
На тысяче строк честно не пробовала 🙂 Нашла у нас документ, там было 112 строк — работало без каких-либо тормозов (при этом проверялось в рабочее время, т.е. при обычной нагрузке системы). Можно как-нибудь нагенерировать тысячу строк программно в какой-нибудь документ, проверить что будет — если будет тормозить, тогда уже заморачиваться насчет запоминания конкретной строки, тогда реализация будет чуть сложнее. В моем случае я фактически использую две команды — загрузить и выгрузить. Конечно, все зависит от особенностей бизнес-процесса конкретной организации. У нас не набивают накладные больше, чем 100-150 строк. В принципе, не представляю, что такое могут продавать, чтобы набивать по 1000 строк — бедный бухгалтер 🙂