Имя: Пароль:
1C
 
Передать в уже открытую форму справочника новые параметры?
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):

// вызов из формы отчета, в котором есть, например, реквизит ВашНомер:
ТекПараметры = Новый Структура;
ТекПараметры.Вставить("Ключ", СсылкаНаЭлементСправочника);
ТекПараметры.Вставить("КлючНазначенияИспользования", "ЭтоВызовИзОтчета");
ОткрытьФорму("Справочник.ВашСправочник.Форма.ФормаЭлемента", ТекПараметры, ЭтаФорма, ЭтаФорма.КлючУникальности);

// процедуры вызываемой формы элемента справочника:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
   Если ЭтаФорма.Параметры.КлючНазначенияИспользования = "ЭтоВызовИзОтчета" Тогда
      ВашНомер = Этаформа.ВладелецФормы.ВашНомер;
      ...
   КонецЕсли;
КонецПроцедуры;

&НаКлиенте
Процедура ПриПовторномОткрытии()
   Если ЭтаФорма.Параметры.КлючНазначенияИспользования = "ЭтоВызовИзОтчета" Тогда
      ВашНомер = Этаформа.ВладелецФормы.ВашНомер;
      ...
   КонецЕсли;
КонецПроцедуры;
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn