Реализация Ctrl+Z в 1С 7.7 (ТиС)

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

В нашей организации очень часто менеджеры и бухгалтера, привыкшие чуть что, как в Word или  Excel, нажимать Ctrl-Z, часто жаловались, что в 1С-ке отсутствует такая удобная функция. В 1С с помощью предопределенных процедур в модуле формы можно обрабатывать комбинации клавиш.

Я сделала таким образом:

Во-первых, нужно, чтобы система запоминала «последнее состояние», чтобы при нажатии сочетания клавиш было что именно возвращать. Пользователь может удалять строку в табличной части, может добавлять строчку, может редактировать ее — например, поменять цену или количество и т.п. 

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

ВременнаяТаблица=СоздатьОбъект(«ТаблицаЗначений«);

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

Процедура ПриОкончанииРедактированияСтроки(НовСтр)

     Если НовСтр=1 Тогда

        ВыгрузитьТабличнуюЧасть(ВременнаяТаблица);

     КонецЕсли;

КонецПроцедуры

Процедура ПриУдаленииСтроки() 

  ВыгрузитьТабличнуюЧасть(ВременнаяТаблица)

КонецПроцедуры //ПриУдаленииСтроки

Теперь собственно, сама процедура обработки нажатия клавиш:

Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Контрол, Символ, ФСО

// Сообщить(«Код клавиши «+Число(КодКлавиши)); можно обрабатывать и другие комбинации, так можно узнать нужные коды клавиш 

  Если (Контрол=1) и (КодКлавиши=90) Тогда 

     Если ПустоеЗначение(ВременнаяТаблица)=0 Тогда 

        ЗагрузитьТабличнуюЧасть(ВременнаяТаблица); 

    КонецЕсли; 

  КонецЕсли; 

КонецПроцедуры

Данное решение не тормозит, даже если в документе по 100 строк. Возможно, кому-нибудь пригодится.

9 Comments

  1. Ёпрст

    http://infostart.ru/public/20038/

    и это, отформатируйте статью — ничерта не видать

    Reply
  2. Ёпрст

    Ну и самое главное, вы забыли упомянуть некоторый момент — загрузку ВК formex.dll, без которой это усё не возможно.

    Reply
  3. a.o.popova

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

    Reply
  4. a.o.popova

    formex.dll — это да, без него все вышеописанное было бы невозможно,

    в глобальном модуле в процедуре ПриНачалеРаботыСистемы() нужно обязательно прописать загрузку компоненты

    ЗагрузитьВнешнююКомпоненту(«FormEx.dll»);

    Reply
  5. Ёпрст

    Да, еще, у тебя не всё «ловит»:

    сортировку строк, обработку подбора.. + «запоминание» только последнего действия.

    Смотри мою поделку — запоминает все реквизиты формы, + все действия «по кругу».

    Если бы щас доделывал бы — всё запихнул бы в один файл — и класс и его подключение и вк.

    Лень.

    Reply
  6. a.o.popova

    а у нас просто этими кнопками в принципе не пользуются, я даже про них и не подумала. На будущее буду знать.

    Reply
  7. via

    Надо поддерживать «женскую» составляющую.. Без них совсем здесь скучно будет.

    не дрейфь.. и всё получится.

    Reply
  8. 13jaguar

    Хорошая идея. Только, как это будет работать, если в табличной части N тысяч строк? Было бы лучше запоминать состояние текущей строки.

    Reply
  9. a.o.popova

    На тысяче строк честно не пробовала 🙂 Нашла у нас документ, там было 112 строк — работало без каких-либо тормозов (при этом проверялось в рабочее время, т.е. при обычной нагрузке системы). Можно как-нибудь нагенерировать тысячу строк программно в какой-нибудь документ, проверить что будет — если будет тормозить, тогда уже заморачиваться насчет запоминания конкретной строки, тогда реализация будет чуть сложнее. В моем случае я фактически использую две команды — загрузить и выгрузить. Конечно, все зависит от особенностей бизнес-процесса конкретной организации. У нас не набивают накладные больше, чем 100-150 строк. В принципе, не представляю, что такое могут продавать, чтобы набивать по 1000 строк — бедный бухгалтер 🙂

    Reply

Leave a Comment

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