|   |   | 
| 
 | Передать в уже открытую форму справочника новые параметры? | ☑ | ||
|---|---|---|---|---|
| 0
    
        RomaH naïve 12.01.23✎ 10:32 | 
        Из отчета открываю справочник - из того же отчета есть номер строки табличной части - которую и активирую при открытии
 А вот как быть когда элемент справочника уже открыт - как ему передать новый номер строки? | |||
| 1
    
        RomaH naïve 12.01.23✎ 10:34 | 
        есть событие "при повторном открытии" .... в нем что-то снаружи можно передать?     | |||
| 2
    
        Волшебник модератор 12.01.23✎ 10:35 | 
        Используй оповещения     | |||
| 3
    
        RomaH naïve 12.01.23✎ 10:38 | 
        Оповещения и Оповестить - это одно и тоже?     | |||
| 4
    
        Волшебник модератор 12.01.23✎ 11:18 | 
        Процедура Оповестить() посылает оповещение всем созданным формам и всем подключенным через метод ПодключитьОбработчикОповещения() процедурам модуля управляемого приложения (модуля обычного приложения) или общего модуля. Если для формы задана процедура-обработчик события ОбработкаОповещения(), то она будет запущена, в процедуру будут переданы указанные параметры. Данный механизм может, например, применяться для организации обмена сообщениями между открытыми формами.     | |||
| 5
    
        Serg_1960 12.01.23✎ 12:58 | 
        Оповещение оповещает все формы - это "плюс"; но только ранее открытые - это "минус". Автору придётся анализировать открыта или нет нужная ему форма (нет смысла оповещать форму, если она ещё не открыта).     | |||
| 6
    
        Serg_1960 12.01.23✎ 13:05 | 
        В старые добрые времена, когда Земля была теплая и по ней бегали мамонты, а формы были только обычными, самым примитивным решением было добавить на форму экспортную переменную ХХХ и анализ значения в ПередОткрытием/ПрОткрытии или ПриПовторномОткрытии
 ТекСсылка = Справочники.Номенклатура.НайтиПоКоду("ХХХ"); ТекФорма = ТекСсылка.ПолучитьФорму("ФормаЭлемента"); ТекФорма.ХХХ = ВашНомер; ТекФорма.Открыть(); | |||
| 7
    
        Serg_1960 12.01.23✎ 13:16 | 
        А сейчас, когда связку команд "ПолучитьФорму/Открыть" использовать не рекомендуется методистами 1С, приходится извращаться :))
 Параметры = Новый Структура; Параметры.Вставить("Ключ", ТекСсылка); Параметры.Вставить("КлючНазначенияИспользования", Формат(ВашНомер,"ЧГ=")); ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлементаУправляемая", Параметры); | |||
| 8
    
        glover 13.01.23✎ 11:51 | 
        (0) переоткрыть нельзя что-ли программно     | |||
| 9
    
        ДедМорроз 13.01.23✎ 21:29 | 
        Если правильно задать ключ уникальности,то можно открыть несколько элементов одного справочника и даже несколько одинаковых элементов.     | |||
| 10
    
        RomaH naïve 16.01.23✎ 08:47 | 
        (8) а зачем? (9) а зачем? (5) не придется
 ОткрытьФорму("Справочник.ВнутренниеДокументы.Форма.ФормаЭлемента",ДанныеДляОткрытия,,ДанныеДляОткрытия.Ключ,,,,); Оповестить("ВыборНовогоКодаСтроки",ДанныеДляОткрытия); да, наверное два раза выполняется кусок кода, но он не тяжелый | |||
| 11
    
        RomaH naïve 16.01.23✎ 09:02 | 
        +(10) если строчки местами поменять - тогда два раза выполнятся не будет
 если форма уже открыта - то сработает оповещение, если не открыта - то при открытии | |||
| 12
    
        Fedor-1971 16.01.23✎ 09:27 | 
        (10) Вот так, прямо сразу, не лучший вариант
 Если ПриСозданииНаСервере имеет долго работающую логику (или 1С будет работать на перегруженном компе), то ОбработкаОповещения ещё не успеет подключиться и логика дополнения параметров не сработает, что даст трудно отлавливаемую динамическую ошибку (У Васи работает, а у Кати нет, бо она ролик смотрит) Корректнее так: Открываем форму, делаем оповещение об открытии оной, в исходной в ОбработкеОповещения отдаём новые параметры | |||
| 13
    
        RomaH naïve 16.01.23✎ 11:07 | 
        (12) как все запущено     | |||
| 14
    
        RomaH naïve 16.01.23✎ 11:08 | 
        достаточно поменять строчки местами
 Оповестить("ВыборНовогоКодаСтроки",ДанныеДляОткрытия); ОткрытьФорму("Справочник.ВнутренниеДокументы.Форма.ФормаЭлемента",ДанныеДляОткрытия,,ДанныеДляОткрытия.Ключ,,,,); и нужную логику прописать и "При открытии" и в обработке оповещения | |||
| 15
    
        Fedor-1971 16.01.23✎ 11:44 | 
        (14) Так извращаться ни кто не мешает, но, при наличии параметров в одном месте и времени, что мешает их сразу отправить в Открываемую форму?     | |||
| 16
    
        RomaH naïve 16.01.23✎ 15:14 | 
        (15) то что форма уже открыта     | |||
| 17
    
        Serg_1960 17.01.23✎ 09:09 | 
        (7) :)
 Параметры = Новый Структура; Параметры.Вставить("Ключ", ТекСсылка); Параметры.Вставить("КлючНазначенияИспользования", "Анализируй значение ПриОткрытии"); ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлементаУправляемая", Параметры); ... Параметры = Новый Структура; Параметры.Вставить("Ключ", ТекСсылка); Параметры.Вставить("КлючНазначенияИспользования", "Анализируй значение ПриПовторномОткрытии"); ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлементаУправляемая", Параметры); | |||
| 18
    
        RomaH naïve 17.01.23✎ 09:44 | 
        (17) так не сработает - при повторном открытии срабытывает только процедура "ПриПовторномОткрытии" - а в ней уже Параметры без добавленных значений (КлючНазначенияИспользования - вот этого не увидишь)     | |||
| 19
    
        RomaH naïve 17.01.23✎ 09:45 | 
        или это специальный ключ?     | |||
| 20
    
        RomaH naïve 17.01.23✎ 09:46 | 
        ну да - специальный, и он как бы для другого     | |||
| 21
    
        Serg_1960 18.01.23✎ 10:25 | 
        Да, это ключевой параметр, который всегда доступен в форме... эээ... и он, в т.ч., участвует в формировании ключа уникальности формы :( У меня - УПП, оно со своими тараканами. Sorry, как-то об этом не подумал. Глупая шутка получилась.
 Но, тем не менее, в каждой шутке есть доля правды, как говорится. Учитывая(1): // вызов из формы отчета, в котором есть, например, реквизит ВашНомер: ТекПараметры = Новый Структура; ТекПараметры.Вставить("Ключ", СсылкаНаЭлементСправочника); ТекПараметры.Вставить("КлючНазначенияИспользования", "ЭтоВызовИзОтчета"); ОткрытьФорму("Справочник.ВашСправочник.Форма.ФормаЭлемента", ТекПараметры, ЭтаФорма, ЭтаФорма.КлючУникальности); // процедуры вызываемой формы элемента справочника: &НаКлиенте Процедура ПриОткрытии(Отказ) Если ЭтаФорма.Параметры.КлючНазначенияИспользования = "ЭтоВызовИзОтчета" Тогда ВашНомер = Этаформа.ВладелецФормы.ВашНомер; ... КонецЕсли; КонецПроцедуры; &НаКлиенте Процедура ПриПовторномОткрытии() Если ЭтаФорма.Параметры.КлючНазначенияИспользования = "ЭтоВызовИзОтчета" Тогда ВашНомер = Этаформа.ВладелецФормы.ВашНомер; ... КонецЕсли; КонецПроцедуры; | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |