8.х Имитация нажатия клавиш

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Tiger86, 19 мар 2014.

  1. TopicStarter Overlay
    Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    посмотрела что есть на форуме - это немного не то (как мне кажется). Вот в чем вопрос...
    Есть табличное поле. Своя кнопка на добавление строки. При добавлении надо чтоб сразу открылась форма выбора справочника. Решила сделать через имитацию нажатия клавиш. Добавляю строку, позиционируюсь на нужную строку и колонку и выполняю след.код

    Код:
    Shell = Новый COMОбъект("WScript.Shell");
        Shell.SendKeys("{Enter}");
        Shell.SendKeys("{F4}");
    он работает, никто не спорит. Но вот в чем беда. 1 строку он отрабатывает, при повторном нажании на кнопку добавить, просто добавляется строка, указанный код как бы не срабатывает и окно выбора не открывается. Что не так? Как это исправить?
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Может нужно заново получать ком-объект ?
    Хотя зачем такой изврат, может стоит использовать УстановитьСобытие() ?
    Конфа-то какая ?
  3. TopicStarter Overlay
    Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну тык весь код же заново обрабатывается по кнопке, так что объект как раз азаново и получается... хз
    щас посмотрю про УтсанвоитьСобытие()
    конфа - самопал на обычных формах
    --- Объединение сообщений, 19 мар 2014 ---
    Алекс не нашла в СП УстановитьСобытие()
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Сейчас посмотрю, как точно называется.
    --- Объединение сообщений, 19 мар 2014 ---
    Примерно вот так не подойдет ?
    Код:
    ОбработчикИзменения = Новый Действие("НачалоВыбора");
    ТаблицаРасшифровки.Колонки.Документ.ЭлементУправления.УстановитьДействие("НачалоВыбора", ОбработчикИзменения);
    --- Объединение сообщений, 19 мар 2014 ---
    Т.е. как-то задействовать УстановитьДействие()
    Последнее редактирование: 19 мар 2014
  5. Thelearning
    Offline

    Thelearning Профессионал в 1С Команда форума

    Регистрация:
    9 сен 2010
    Сообщения:
    701
    Симпатии:
    72
    Баллы:
    54
    Эм... или я чуть вопрос не понял... а что мешает просто на свою кнопку повесить добавление строки и открытие нужной формы?? У ТЧ есть событие "ПередНачалоДобавления". И без всяких имитаций и прочего.
  6. TopicStarter Overlay
    Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    тож лишние события прописывать, т.к. мне потребуется НачалоВыбора (задать свои параметры формы выбора справочника), ОбработкаВыбора (произвести действия с выбранным значением). Потому хотелось бы штатный метод. Предложенный код срабатывает, но почему то только 1 раз, второй раз уже не открывается форма выбора
  7. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Тоже не вижу смысла в прикручивании пятого колеса, я никогда не парился, просто ставил кнопки вручную и обрабатывал команду
  8. TopicStarter Overlay
    Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ладно попробую через события... хотя вопрос остается открытым, может кто сталкивался
  9. Alex_fess
    Offline

    Alex_fess Опытный в 1С

    Регистрация:
    23 мар 2011
    Сообщения:
    256
    Симпатии:
    7
    Баллы:
    29
    Может подойдет такой вариант:
    В процедуре ПриАктивацииСтроки поставить условие на заполненность определенного значения (например, номенклатура, если рассматривать таб часть "товары"), если не заполнено тогда выполнять нужную функцию (открыть окно выбора справочника и вернуть значение). Тогда не нужны дополнительные кнопки добавления строк
  10. TopicStarter Overlay
    Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    зачем мне проверка? мне надо именно добавить строку, встать на определенную ячейку и открыть окно выбора и выполнить все последующие штатные процедуры. Этот код и открывает окно выбора. И все ок. Но только 1 раз, при повторном нажатии строка то добавляется, но вот окно выбора не открывается - в этом вся печалька и есть. Путаюсь по другому...
  11. Alex_fess
    Offline

    Alex_fess Опытный в 1С

    Регистрация:
    23 мар 2011
    Сообщения:
    256
    Симпатии:
    7
    Баллы:
    29
    Код:
    Процедура ПриАктивацииСтроки()
        ТекСтр=ЭлементыФормы.Таблица.ТекущаяСтрока;
    Если ЗначениеЗаполнено(ТекСтр) Тогда //При удалении последней строки таблицы может выдать ошибку
            Если ЗначениеЗаполнено(ТекСтр.Номенклатура) Тогда //параметр по которому система определит новая это строка или нет
                //ВашКод
            КонецЕсли;
        КонецЕсли;
    КонецПроцедуры
    Выполнение корректно и при стандартном добавлении
  12. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    а автовыбор незаполненного не пробовали применять ??
  13. TopicStarter Overlay
    Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    это где? в УФ вроде видела такое свойство, а в обчных чет не нахожу
  14. GlukAl
    Offline

    GlukAl Опытный в 1С

    Регистрация:
    4 окт 2012
    Сообщения:
    187
    Симпатии:
    7
    Баллы:
    29
    попробовал сам через автовыборнезаполненного, фигово получается

    а вот такой каркас вроде ничего
    Код:
    Процедура КнопкаСформироватьНажатие(Кнопка)
        ЭлементыФормы.ТабличноеПоле1.Добавитьстроку();
    КонецПроцедуры
    
    Процедура ТабличноеПоле1ПриАктивизацииСтроки(Элемент)
        Если Не ЗначениеЗаполнено(Элемент.ТекущаяСтрока.Банк) Тогда
            ФормаПодбора = Справочники.Банки.ПолучитьФормуВыбора(,ЭтаФорма,);
            ФормаПодбора.МножественныйВыбор = Ложь;
            Элемент.ТекущаяСтрока.Банк = ФормаПодбора.ОткрытьМодально();
        КонецЕсли;
    КонецПроцедуры
    
    Tiger86 нравится это.
  15. TopicStarter Overlay
    Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    спасибо, я примерно также и сделала, только не ПриАктивизации (у меня тут другие события обрабатываются), а при нажатии на мою кнопку Добавить.

Поделиться этой страницей