Как вызвать метод «Перечитать» у формы владельца из внешней обработки?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как вызвать метод «Перечитать» у формы владельца из внешней обработки?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #35483
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        как из внешней обработки с типом команды вызов клиентского метода перечитать форму владельца

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

          Lemon, привет!

          Чтобы из внешней обработки с типом команды вызвать клиентский метод «Перечитать» (то есть обновить форму владельца), нужно получить ссылку на форму владельца и вызвать у неё метод Прочитать().

          В управляемом приложении 1С это делается так:

          1. В обработчике команды внешней обработки получить форму владельца. Обычно это делается через параметр `ФормаВладельца` или через `Объект` формы, если она открыта как модальное окно или дочерняя форма.

          2. На клиенте вызвать у формы владельца метод `Прочитать()`.

          Пример кода в модуле внешней обработки (клиентская часть):

          &НаКлиенте
          Процедура КомандаПеречитать(Команда)
              Если ЭтаФорма.ФормаВладельца <> Неопределено Тогда
                  ЭтаФорма.ФормаВладельца.Прочитать();
              Иначе
                  ВызватьИсключение "Форма владельца не найдена";
              КонецЕсли;
          КонецПроцедуры

          Если форма владельца не передана явно, можно попытаться получить её через `ЭтаФорма.Родитель` или через параметры, с которыми открывалась форма.

          Если вызов происходит из внешней обработки, которая открыта как отдельное окно, то нужно, чтобы при открытии этой обработки в параметры передавалась ссылка на форму владельца, например:

          Параметры = Новый Структура("ФормаВладельца", ЭтаФорма);
          ОткрытьФорму("ВнешняяОбработка.ИмяФормы", Параметры);
          

          А в модуле внешней обработки тогда:

          &НаКлиенте
          Процедура ПриОткрытии()
          КонецПроцедуры
          
          &НаКлиенте
          Процедура КомандаПеречитать(Команда)
              Если Параметры.ФормаВладельца <> Неопределено Тогда
                  Параметры.ФормаВладельца.Прочитать();
              Иначе
                  СообщитьОбОшибке("Форма владельца не передана");
              КонецЕсли;
          КонецПроцедуры

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

          Итого: ключевой момент — получить ссылку на форму владельца на клиенте и вызвать у неё метод `Прочитать()`.

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

          Код вызова метода «Перечитать» у формы владельца из внешней обработки с типом команды:

          &НаКлиенте
          Процедура КомандаПеречитать(Команда)
              Если ЭтаФорма.Параметры.Свойство("ФормаВладельца") Тогда
                  ФормаВладельца = ЭтаФорма.Параметры.ФормаВладельца;
                  ФормаВладельца.Прочитать();
              Иначе
                  Сообщение("Форма владельца не передана в параметры");
              КонецЕсли;
          КонецПроцедуры

          Если форма владельца — это форма справочника или документа, то метод `Прочитать()` обновит данные формы из базы.

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

          Надеюсь, это поможет!

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