Имя: Пароль:
1C
1С v8
УФ: Как из подчиненной формы получить путь к данным ТЧ родительской формы
,
0 Cyberhawk
 
23.03.16
16:34
Дано: форма документа в конфигурации на управляемых формах. В этой форме есть:
- ЭУ (элемент управления) "ПереченьТоваров" (тип: ТаблицаФормы), ПутьКДанным = "Объект.Товары"
- реквизит формы "Объект.Товары" с типом (ДокументТабличнаяЧасть.ИмяДокумента.Товары)
Соответственно, у документа в метаданных есть ТЧ "Товары", которая отображается на форме с помощью ЭУ "ПереченьТоваров".

Код модуля этой формы модифицировать нельзя. Эту форму будем называть "первая форма".

Я на клиенте из первой формы вызываю код открытия "второй формы". В качестве владельца второй формы выступает первая форма.
Фокус в первой форме (свойство формы "ТекущийЭлемент") всегда установлен на таблице "ПереченьТоваров". Больше во вторую (подчиненную) форму никакой информации о первой форме (кроме как "ВладелецФормы") передать нельзя.

Вопрос: как из второй формы получить путь к данным таблицы, которая активна в первой форме (форме-владельце)?
1 Звездец
 
23.03.16
16:36
Выгрузит в ТЗ и передать второй форме при открытии как параметр. Ну а дальше делай с ней чего хочешь во второй форме и возвращай назад после
2 Mort
 
23.03.16
16:36
А отладчик что во владельце формы показывает?
3 Cyberhawk
 
23.03.16
16:37
(1) Никаких параметров во вторую форму, кроме ее владельца, передавать нельзя. Т.е. нельзя вмешаться в код открытия подчиненной формы.
4 Cyberhawk
 
23.03.16
16:37
(2) Объект с типом "УправляемаяФорма"
5 LordCMEPTb
 
23.03.16
16:37
(0) Могу посочувствовать. Путь к данным вроде как только на сервере, а передать форму на сервер умеет только контекстный вызов.
6 Cyberhawk
 
23.03.16
16:39
(5) Да, свойство элемента управления "ПутьКДанным" доступно только на сервере.
Насчет контекстного вызова - спасибо за информацию.
7 LordCMEPTb
 
23.03.16
16:47
(6) Да по сути не за что.
Пытался как-то из одной формы проверить наличие реквизитов в другой форме. И форму пытался передать, и во владельца её установить, и сериализовать... Плюнул, сделал через попытку-исключение.
8 aleks_default
 
23.03.16
17:43
А подписку на событие ОбработкаПолученияФормы можно добавить?
9 Cyberhawk
 
23.03.16
17:47
(8) Увы, нет.
Да и неясно, что бы этот обработчик дал, ведь Я открываю не форму объекта, а свою форму внешней обработки...
10 aleks_default
 
23.03.16
17:50
Ну форму объекта(родительскую) чуть подправить добавив туда реквизит, в котором хранить путь к данным нужной таблицы. Ну это так, в порядке бреда:)
11 Cyberhawk
 
23.03.16
17:51
(10) Не, форму родительского объекта править нельзя - она типовая (на замке). Если бы ее можно было править, то все бы было слишком просто.
12 FIXXXL
 
23.03.16
17:54
(11) каков конечный план?
поправить данные объекта или что-то другое?
13 aleks_default
 
23.03.16
17:56
Не, форму изменить в обработкеПолученияФормы. Там ее можно получить и программно добавить реквизит типа строка. Получится7
14 Cyberhawk
 
23.03.16
18:07
(12) На данный момент - из второй формы на клиенте обращаться к реквизиту первой формы (формы-владельца) "Объект.ИмяТЧ", ИмяТЧ придется "угадывать" из имени таблицы (в типовых почти везде у таблиц, отображающих ТЧ объектов, путь к данным выглядит как "Объект.ИмяТЧ", а таблица имеет имя, равное ИмяТЧ)
15 FIXXXL
 
23.03.16
21:10
(14) может удобнее сразу Обэкт редактировать?
Форма1 и ее элементы именно в процессе зачем нужны? Мож ее достаточно сгонять по окончании на серв и обновить?
16 oslokot
 
23.03.16
21:37
(0) пробежаться по открытым окнам, узнать активный в данный момент элемент формы-источника
17 Записьдампа
 
23.03.16
21:41
(0) так оно у тебя в http://catalog.mista.ru/public/505239/ уже работает или еще нет? =)
18 Drac0
 
23.03.16
21:47
(0) Почему бы расширение не заюзать?
19 Cyberhawk
 
24.03.16
08:25
(17) Работает.
Ограничения прописаны в разделе публикации "Особенности и ограничения".
(15) Я объект и редактирую, вернее его табличную часть, представленную в форме через реквизит с типом (ДанныеФормыКоллекция). Как узнать имя нужной ТЧ, по-прежнему неясно.
(16) Я и так знаю активный элемент формы-источника (это таблица формы, отображающая нужную мне табличную часть). Вопрос в том, как узнать, с каким реквизитом формы (свойство "ПутьКДанным") эта таблица связана.
(18) Можешь подробнее рассказать план действий? Что именно (какие объекты метаданных) ты предлагаешь добавить / изменить в расширении?
20 FIXXXL
 
24.03.16
09:24
(19) ну если обработка под конкретный док, можно в самой обработке завести соответствие "ИмяЭлемента - ИмяТЧОбъекта"
при открытии - определять
21 Cyberhawk
 
24.03.16
09:57
(20) Нет, обработка универсальная для типовых конфигураций на БСП.
Впрочем, в типовых конфигурациях от 1С соответствие имени таблицы на форме и имени табличной части почти везде "один в один", что хоть как-то радует.
Но тот факт, что ребятки, делающие БСП, так и не научились модифицировать объект на клиенте без его записи в ИБ (и совсем недавно научились делать это пока только на сервере), удручает.
22 FIXXXL
 
24.03.16
13:34
(21) причем тут "ребятки"? на клиенте в упр.приложении Объекта нет в принципе

если говорить про ТЧ, можешь глянуть как прыгает счетчик обращений на сервак при прокрутке большого списка
т.е. форма неявно гоняется на сервак обновляться
23 Cyberhawk
 
24.03.16
14:48
(22) Я сейчас тебе про подсистему БСП "Дополнительные отчеты и обработки" говорю, в которой для вызова доп. обработки с видом "Заполнение объекта" требуется сначала записать объект в ИБ, ибо в команду доп. обработки передается ссылка на объект.
Можно сказать, что неточно выразился выше: не "на клиенте", а "с клиента".
Но уже прогресс есть: где-то полгода назад добавили тип команды "Заполнение формы", и теперь в коде этой команды можно пользоваться контекстом формы, правда весь код выполняется только на сервере.
Не хватает всего-то еще одной потребности, являющейся комбинацией уже реализованных возможностей: начало работы обработки на клиенте (реализовано, но недоступен контекст формы на сервере) + иметь возможность обращаться к форме объекта на сервере (реализовано, но недоступен клиент)
24 Drac0
 
24.03.16
15:55
(19) "Можешь подробнее рассказать план действий?"

Эмм, добавить команду на форму в расширении и ее обработчик. А там уже пиши, что душе угодно.
25 Cyberhawk
 
24.03.16
16:38
(24) Я правильно понимаю, что после обновления типовой конфигурации (в частности - формы) расширение перестанет работать, т.е. база не обновится?
26 aleks_default
 
24.03.16
16:52
[Я сейчас тебе про подсистему БСП "Дополнительные отчеты и обработки" говорю, в которой для вызова доп. обработки с видом "Заполнение объекта" требуется сначала записать объект в ИБ, ибо в команду доп. обработки передается ссылка на объект. ] А у меня почему-то все  работает без записи объекта, причем версия БСП старая.
27 Cyberhawk
 
24.03.16
17:08
(26) Кажись до версии 2.1 туда передавалась таблица формы. Также возможно, что проверку на запись ввели позже.
Посмотри свою версию БСП, если не сложно (общий модуль "Обновление...БСП")
28 aleks_default
 
24.03.16
17:26
Нет такого модуля. У меня возможно сначало было БСП 1.0, но потом ее сильно доработали. А может даже встраивали отдельными кусками. Надо посмотреть как сейчас в типовых функционал доп. обработок и отчетов реализован. Неужели все так грустно, как ты говоришь?
29 Cyberhawk
 
24.03.16
17:29
Я помню, что на заре УТ 11.0, в далеком 2013 году, делал обработку заполнения ТЧ - там можно было менять ТЧ без записи объекта, но, кажется, только на клиенте (или только на сервере).
Сейчас уже можно работать с данными формы на сервере (тип команды "ЗаполнениеФормы"), если же тебе нужен какой-то интерактив (выполнение кода на клиенте), то без записи объекта - никак.
30 Cyberhawk
 
29.03.16
11:21
В общем, путь к данным как с клиента, так и с сервера неконтекстно никак не получить (если заранее не позаботиться об этом, модифицировав модуль формы)
https://partners.v8.1c.ru/forum/topic/1035448#m_1035448

Однако, мне удалось неконтекстно передать коллекцию формы с клиента на сервер (избежав ошибки "Нельзя изменять поле, содержащее объект данных формы"), чтобы на сервере уже перебрать имена колонок, что мне и требовалось для (17).
31 alexey980
 
24.04.16
23:11
еще раз спасибо
32 alexey980
 
24.04.16
23:36
случайно не в ту ветку написал. но и вам тоже))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс