Почему не срабатывает ОбработкаВыбора в таблицах 1С 8.3.27.1859?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему не срабатывает ОбработкаВыбора в таблицах 1С 8.3.27.1859?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #36229
      Фото аватараOdineski
      Участник

        Из табличной части при добавлении вызывается своя форма выбора в которую передается Элемент (ТаблицаФормы).
        При выборе в форме выборе, форма закрывается но обработчик у табличной части ОбработкаВыбора не срабатывает. Почему?
        Платформа 8.3.27.1859.

      • #36230
        bot_avaOdin — Одинэсник
        Участник

          Иван, привет!

          В платформе 1С 8.3.27.1859 есть известная особенность, связанная с тем, что при открытии формы выбора из табличной части и передаче туда Элемента (ТаблицаФормы) обработчик события ОбработкаВыбора у табличной части может не сработать, если форма выбора закрывается стандартным способом (например, через закрытие формы или через ОткрытьФормуМодально).

          Причина в том, что событие ОбработкаВыбора срабатывает только если форма выбора открыта в режиме выбора (РежимВыбора = Истина) и при выборе элемента форма не просто закрывается, а именно вызывает метод ОповеститьОВыборе или аналогичный, который генерирует событие выбора у владельца формы.

          Если же форма выбора закрывается напрямую (например, через Закрыть() или ОткрытьФормуМодально без правильной передачи результата), то событие ОбработкаВыбора у владельца (в данном случае табличной части) не вызывается.

          Также в версии 8.3.27.1859 есть нюанс с передачей владельца формы — если в параметрах открытия формы не указать явно владельца (например, передать Элемент табличной части как владелец), то событие выбора не будет корректно сгенерировано.

          Что делать:

          1. При открытии формы выбора из табличной части обязательно указывайте параметр РежимВыбора = Истина.

          2. Передавайте владельца формы явно, например:

          3. В форме выбора при выборе элемента вызывайте метод ОповеститьОВыборе(ВыбранноеЗначение), а не просто закрывайте форму.

          4. В форме, где находится табличная часть, реализуйте процедуру ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора), которая будет обрабатывать выбранное значение.

          Если вы используете ОткрытьФормуМодально, то событие ОбработкаВыбора не сработает, потому что оно работает только при асинхронном открытии формы с РежимВыбора = Истина.

          Если хотите использовать модальное открытие, то нужно получать результат из вызова ОткрытьФормуМодально и обрабатывать его после закрытия формы, а не через событие ОбработкаВыбора.

          Итого, скорее всего, у вас форма выбора закрывается без вызова ОповеститьОВыборе, либо не установлен РежимВыбора, либо не передан владелец формы, из-за чего событие ОбработкаВыбора не срабатывает.

          Рекомендую посмотреть подробности и примеры здесь:

          https://infostart.ru/public/236382/ — пример открытия формы выбора с обработкой выбора через событие

          https://infostart.ru/1c/articles/96705/ — пример реализации выбора из произвольной формы с использованием ОповеститьОВыборе

          https://infostart.ru/1c/articles/549160/ — как правильно указывать форму выбора и режим выбора

          Если кратко — событие ОбработкаВыбора не срабатывает, потому что форма выбора не открыта в режиме выбора с правильной передачей владельца и не вызывает ОповеститьОВыборе.

          Если нужно, могу помочь с конкретным кодом для вашего случая.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С