8.х Как программно снять активизацию строки формы выбора справочника?

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

  1. TopicStarter Overlay
    Ярик
    Offline

    Ярик

    Регистрация:
    21 мар 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    При открытии формы выбора справочника, по умолчанию происходит активизация (выделение) первой строки этой формы. Как программно запретить такую активизацию? Чтобы активизация строки происходила, допустим, при клике мышкой, но ни при открытии формы.
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Для чего такое нужно? в чем задача стоит?
  3. xm78z9
    Offline

    xm78z9

    Регистрация:
    17 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Задача состоит в том, чтобы при одинарном клике на строке, исполнялся определённый код, связанный с данными которые находятся в строке (по которой кликнули).

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

    Проблема в том, что при загрузке формы с ТЗ, автоматически активизируется первая строка, и соответственно сразу же выполняется код по получению формы с фотографией.
    Как избежать этого?

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

    П.С. в отличии от автора этой темы, я работаю с 1с 8.2, но думаю решение проблемы на 8.0, 8.1 не будет сильно отличаться от платформы 8.2.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Можно просто через переменную. В начале перед открытием присваиваем 1. В вашей процедуре сравниваем номер строки и переменную (они равны значит код не выполнится). При выполнении (уже реальное перемещение курсора) - "двигаем" переменную.
  5. xm78z9
    Offline

    xm78z9

    Регистрация:
    17 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Такой вариан: если загружается форма с ТЗ и первая строка сразу активна, но я не даю ей действия(через переменную), то… как же её выбрать, именно первую строку? Она же уже выбрана(активизирована), и при повторном щелчке на уже выбранную строку/ячейку ничего не произойдёт. Т.е. надо сначала выбрать какую-то другую строку, а потом выбирать первую… а это не приемлемо =(

    П.С. извиняюсь, за даблпост, почемуто кнопка [Изменить] пропала
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Тогда как быть с этим?
    [off]Кнопка "изменить" доступна вам только ограниченное время после отправки сообщения[/off]
  7. xm78z9
    Offline

    xm78z9

    Регистрация:
    17 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Так мне не надо чтобы сразу выполнялся код, мне надо чтобы он выполнялся после щелчка по строке.
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Получается код процедуры срабатывает после активизации формы. Тогда просто. До активизации Переменная=0. В вашей процедуре проверяем на =0 и сбрасываем в 1. Получается как раз первый раз она и не выполнится. Все последующие - вэлкам
  9. xm78z9
    Offline

    xm78z9

    Регистрация:
    17 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1

    всё то так, только Вы, наверное не до конца поняли(или я не доступно написал) пост №5.
    Первая строка то уже будет активизирована, и при щелчке ещё раз по ней, активизация не произойдёт
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Других объектов на форме нет? Если изначально активизировать другой объект, то все должно получиться
  11. xm78z9
    Offline

    xm78z9

    Регистрация:
    17 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Пробовал так. добавляю кнопку на форму, ставлю галку на АктивизироватьПоУмолчанию. заускаю, кнопка то становится активизированной, только в ТЗ первая строка также одновременно с кнопкой скановится активизированной
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Это вы активизировали именно кнопку. А если:
    1) програмно активизировать объект до открытия формы
    2) В редакторе диалога в порядке обхода таблица д.б. не первой
  13. Настройщик
    Offline

    Настройщик Опытный в 1С

    Регистрация:
    17 окт 2010
    Сообщения:
    204
    Симпатии:
    7
    Баллы:
    29
    Лучше так.
    До активизации Переменная= -1. В вашей процедуре проверяем на = -1 и сбрасываем в 0. Получается как раз первый раз она и не выполнится. Все последующие - вэлкам.
  14. xm78z9
    Offline

    xm78z9

    Регистрация:
    17 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    начну со 2) в 1с 8.2 порядок обхода, вроде как, не меняется, т.е. происходит по правилу сверху-вниз, слева-направо... но всеже я поставил в форме кнопку на первое место... все осталось по прежнему

    1) а как програмно активизировать другой объект?
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    В 8.2 разве нет такого метода формы?
  16. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Опять эта тема :angry:
    Вы сейчас пытаетесь прыгнуть через голову поатформы. Если бы Вы писали на языках высокого уровня, то данныя задача легко решается, но Вы используете язык платформы, а разработчики метод setfocus в платформу не добавляли, посему не надо писать обработки для которых не существует методов в платформе. Для увеличения скорости разработки, многие функции по управлению формой платформа берёт на себя, это допустимое ограничение, лучше изменить алгоритм работы.
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    А если так:

    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.ДопустимПолеВвода1;

    Это не есть активация элемента?
  18. xm78z9
    Offline

    xm78z9

    Регистрация:
    17 янв 2011
    Сообщения:
    20
    Симпатии:
    0
    Баллы:
    1
    Бесполезно, такое ощущение как будто таблица живет своей отдельной жизнью независимо от формы, сама активизируется когда ей надо :angry:
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Значит многоуважаемый mialord прав. Или смириться и обозвать это "особенностью")))) или переписать алгоритм.
  20. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Если на форме есть что активизировать в начале, кроме табличного поля, тогда можно проверять какой элемент в фокусе непосредственно в процедуре активизации строки. И (не)выполнять определенные действия. Типа так:

    Код:
    Процедура НашеТабличноеПолеПриАктивизацииСтроки(Элемент)
    Если ЭтаФорма.ТекущийЭлемент.Имя="НашеТабличноеПоле" Тогда
    //Тут выполняем нужные действия.		
    КонецЕсли;
    КонецПроцедуры
    
    

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