[РЕШЕНО] Узнать объект вызываемой команды

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

  1. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.015
    Симпатии:
    25
    Баллы:
    54
    И снова всем доброго времени суток.

    Есть внешняя обработка, у обработки есть табличные части.
    Для одной табличной части вешаю Команды "УстановитьФлаг" и "СнятьФлаг"
    В коде пробегаю по строкам и заполняю реквизит булево

    Код:
    &НаКлиенте
    Процедура УстановитьФлаг(Команда)
       
        Для Каждого Строка Из Объект.НовыеКонтрагенты Цикл
            Строка.Записывать = Истина;
        КонецЦикла;
    
    КонецПроцедуры
    
    Как мне для другой табличной части использовать эти же команды. Т.е. как мне определить, откуда команда вызывается, чтобы заменить "Объект.НовыеКонтрагенты" на что-то типа "ВызывающийОбъект". Команду вешаю на командную панель Табличной части, выкинутой на форму.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Нужна общая процедура, одним из параметров которой будет признак обрабатываемой ТЧ.
  3. AlexeyKh
    Offline

    AlexeyKh Опытный в 1С

    Регистрация:
    27 июл 2012
    Сообщения:
    148
    Симпатии:
    18
    Баллы:
    29
    а кнопок сколько будет?
    если над каждой ТЧ своя пара кнопок (установить+снять), то примерно так


    //пара обработчиков для ТЧ - НовыеКонтрагенты
    &НаКлиенте
    Процедура УстановитьФлагНовыеКонтрагенты(Команда)
    ИзменитьФлаг("НовыеКонтрагенты", Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура СнятьФлагНовыеКонтрагенты(Команда)
    ИзменитьФлаг("НовыеКонтрагенты", Ложь);
    КонецПроцедуры


    //пара обработчиков для друой ТЧ
    &НаКлиенте
    Процедура УстановитьФлагДругаяТЧ(Команда)
    ИзменитьФлаг("ДругаяТЧ", Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура СнятьФлагДругаяТЧ(Команда)
    ИзменитьФлаг("ДругаяТЧ", Ложь);
    КонецПроцедуры

    &НаКлиенте
    Процедура ИзменитьФлаг(ИмяТЧ, ЗначениеФлага)
    Для Каждого Строка Из Объект[ИмяТЧ] Цикл
    Строка.Записывать = ЗначениеФлага;
    КонецЦикла;
    КонецПроцедуры
  4. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.015
    Симпатии:
    25
    Баллы:
    54
    Я думал уже об этом. Но так не получается. Получается ,что мне тогда всё равно кучу команд плодить и уж вызывать из них, общую процедуру.
    Не ужели никак нельзя понять с какой командной панели прилетела команда?
    --- Объединение сообщений, 5 апр 2017 ---
    А если 10 табличных частей, то плодим клоны кода УстановитьФлаг/СнятьФлаг() С суффиксом (ТабЧастьИмя)?
    Последнее редактирование: 5 апр 2017
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    Как вы себе вообще представляете решение вашей задачи с технической стороны? каким образом вы собираетесь определять, какую ТЧ нужно обработать в данный момент, если не отдельной процедурой, прикрепленной к кнопке?
  6. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.015
    Симпатии:
    25
    Баллы:
    54
    Вот с технической части и не представляю))).
    Так вот и думал, что в момент запуска команды, определить с какой командной панели вызывалась, а уж через эти данные дотянуться до самой табличной части.

    Думал может у параметра "Команда" есть какое-нибудь свойство, или значение со ссылкой откуда команда была вызвана. Но увы и ах...нету(.
    Ладно. Получается что никак. Всем спасибо. Расходимся. Тему можно закрывать
  7. AlexeyKh
    Offline

    AlexeyKh Опытный в 1С

    Регистрация:
    27 июл 2012
    Сообщения:
    148
    Симпатии:
    18
    Баллы:
    29
    немного был не прав, попробуйте такой вариант
    для всех кнопок назначаете одну процедуру
    и внутри ее анализируете имя кнопки,
    т.е. кнопок сколько угодно
    а процедур всего две


    //кнопки элементы формы, называете примерно так Флаг_НовыеКонтрагенты_Истина
    //внутри процедуры, по разделителям, легко получите
    //ИмяТЧ
    //ЗначениеФлага

    //вот эту одну процедуру назначаете всем кнопкам по установке, снятия флажка
    &НаКлиенте
    Процедура ОбработатьФлаг(Команда)

    //анализируете Команда.Имя получаете
    //ИмяТЧ
    //ЗначениеФлага

    ИзменитьФлаг(ИмяТЧ, ЗначениеФлага);
    КонецПроцедуры

    &НаКлиенте
    Процедура ИзменитьФлаг(ИмяТЧ, ЗначениеФлага)
    Для Каждого Строка Из Объект[ИмяТЧ] Цикл
    Строка.Записывать = ЗначениеФлага;
    КонецЦикла;
    КонецПроцедуры
    Peroman нравится это.
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.408
    Симпатии:
    973
    Баллы:
    204
    В общем случае команды вообще могут называться как угодно :)
  9. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.015
    Симпатии:
    25
    Баллы:
    54
    А вот это пожалуй подходит.

    Сделал так:
    Код:
    &НаКлиенте
    Функция ОбработатьФлаг(Команда)
       
        ФлагВзведен = ?(Лев(Команда.Имя,5)="Устан", Истина, Ложь);
        ИмяТабличнойЧасти = Сред(Команда.Имя,10);
        УстановитьСнятьФлаг(,УстановитьСнятьФлаг);
       
    КонецФункции
    
    Имя команды делаю УстанФлаг_ИмяТабЧасти или СнятьФлаг_ИмяТабЧасти

    И всё отлично, единственное покане могу сообразить, как теперь имя имя табличной части обратиться к ней? Ведь это ТабЧасть, реквизит обработки, а не реквизит формы.
  10. TopicStarter Overlay
    Peroman
    Offline

    Peroman Профессионал в 1С

    Регистрация:
    26 май 2009
    Сообщения:
    1.015
    Симпатии:
    25
    Баллы:
    54
    Всё супер.Теперь точно можно тему закрывать.

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