Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Перебор реквизитов упр формы

Перебор реквизитов упр формы
Я
   seraf
 
02.12.20 - 12:08
Напомните плиз. Получаю на клиенте форму внешней обработки. Как получить реквизиты формы в массив. ПолучитьРеквизиты() работает на сервере, куда передать форму клиентского приложения нельзя, а там не работает ПолучитьФорму()
   ДенисЧ
 
1 - 02.12.20 - 12:09
ВсеЭлементыФормы (FormAllItems)
Элементы коллекции:
ГруппаФормы; ТаблицаФормы; ПолеФормы; КнопкаФормы
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается имя элемента.
...
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
   Fragster
 
2 - 02.12.20 - 12:10
(1) это элементы, а не реквизты
   seraf
 
3 - 02.12.20 - 12:11
Мне не надо все элементы формы обойти, там же и декорации и прочее, мне надо обойти только реквизиты на закладке Реквизиты
   seraf
 
4 - 02.12.20 - 12:17
можно передать полученную форму на сервер чтобы вернуть ПолучитьРеквизитыФормы() или как правильно?
мне просто список всех идентификаторов реквизитов формы на клиент вернуть надо
   acht
 
5 - 02.12.20 - 12:23
(0) Сделать контекстный вызов.

ПолучитьРеквизиты - это метод контекста формы, единственный способ "передать" форму на сервер - контекстный вызов из нее самой.
   acht
 
6 - 02.12.20 - 12:26
Ну еще можешь запустить конфигуратор с ключами для разбора внешней обработки в файлы и разобрать полученный XML.

"Напомните плиз"...
   seraf
 
7 - 02.12.20 - 12:28
я чет думал проще всё и туплю
   lodger
 
8 - 02.12.20 - 12:32
(7) когда лезешь удалять гланды через ж.пу, то всё действительно непросто.

поза 1: вызвать открытие формы можно только НаКлиенте;
поза 2: поковыряться во всех потрохах формы можно только НаСервере;
поза 3: передать данные в открываемую форму можно через параметры открытия формы.
   seraf
 
9 - 02.12.20 - 12:38
Если с другой стороны, а на сервере через ВнешняяОбработкаМенеджер получив ВнешняяОбработкаОбъект, я могу как-то перебрать реквизиты её формы?
   acht
 
10 - 02.12.20 - 12:41
(9) Нет не можешь. Перебрать реквизиты метаданных можешь, реквизиты формы - нет.
   acht
 
11 - 02.12.20 - 12:43
(10)+ Начнем хотя бы с того, что у обратбоки может быть несколько форм. Чтобы получить хоть одну из них, надо... и все начинается сначала.
   seraf
 
12 - 02.12.20 - 12:44
блин чеж так сложно, я же вижу свои реквизиты в ФормаКлиентскогоПриложения вкупе с остальным, всё что нужно просто отделить реквизиты в список значений)
получается я могу применить ПолучитьРеквизитыФормы() только при создании её на сервере когда в контексте нахожусь
   acht
 
13 - 02.12.20 - 12:50
(12) Следи за руками:

1) Ты можешь получить реквизиты формы только находясь на сервере.
2) Единственный вариант "передать" форму на сервер - контекстный вызов.
3) Контекстный вызов можно произвести только из самой формы.

Теперь складывай 3) и 1). Получится, что получить реквизиты формы можно только вызовом из нее самой, а не со стороны.

А по поводу "вижу" - это ты их имена знаешь. Ну так и напиши там где ты хочешь - Список.Добавить("ИмяИзвестногоМнеРеквизита")
   seraf
 
14 - 02.12.20 - 12:55
цель у меня была простая.
находясь в сторонней форме и выбирая там обработку, текстовый реквизит должен наполниться списком значений реквизитов формы выбранной обработки.
   seraf
 
15 - 02.12.20 - 12:57
хорошо когда я выполняю ПолучитьФорму() проходят процедуры её создания на сервере, а как мне там вклиниться и функцией вернуть результат ПолучитьРеквизитыФормы к себе "домой"
   Fragster
 
16 - 02.12.20 - 13:11
(14) ну нету reflection в 1с, как и кучи другого всего
   Fragster
 
17 - 02.12.20 - 13:11
и скорее всего не нужно
   seraf
 
18 - 02.12.20 - 13:20
(16) я хз чего тут нету, как мне элементарную в принципе задачку выполнить из (14)
не отбирать же реквизиты из общего списка по типу, ну теоретически все строка/дата/число мне нужны и можно обойти элементы формы, но что это за код
   НЕА123
 
19 - 02.12.20 - 13:27
Форму разве нельзя передать с клиента на сервер?
   Fragster
 
20 - 02.12.20 - 13:34
(18) в (14) не исходная задача
   Kassern
 
21 - 02.12.20 - 13:36
(18) Если нужны только те реквизиты, которые отображены на форме, то можно попробовать использовать НужнаяФорма.ПодчиненныеЭлементы
   acht
 
22 - 02.12.20 - 13:37
(18) > я хз чего тут нету, как мне
Я тебе максимум еще могу направление на ближайющую стенку указать, извини.
   seraf
 
23 - 02.12.20 - 13:37
в (14) я коротко написал чего сделать то хочу, в зависимости от выбранной обработки наполнять список значений соседнего реквизита формы
   Kassern
 
24 - 02.12.20 - 13:39
(21) а блин, там группировка все испортит. Я бы просто пробежался по всем элементам и исключить те, что не относятся к реквизитам формы (декорации, кнопки и прочие)
   seraf
 
25 - 02.12.20 - 13:39
(22) я ж не знаю, может и нельзя или не так делаю, поэтому написал что сделать хочу и спрашиваю) выглядело просто
   Fragster
 
26 - 02.12.20 - 13:39
(23) если это типа унификации, чтобы реализовать что-то типа плагинов, то тебе нужно придумать "контракт" или "интерфейс" и в "подключаемых" обработках его реализовывать в качестве экспортных методов. И тогда всё станет намного проще.
   seraf
 
27 - 02.12.20 - 13:41
(24) да, но еще имя элемента формы может же отличаться от реквизита и тогда будет плохо
   Fragster
 
28 - 02.12.20 - 13:41
(24) да-да. а еще бывает, что не все реквизиты есть в элементах. ну и некоторые реквизиты тупо не могут отражаться на элементы - потому что это объекты, например.
   Fragster
 
29 - 02.12.20 - 13:42
я же говорю, тупо "получить список реквизитов" - не сама задача. похоже на метод решения какой-то другой задачи
   seraf
 
30 - 02.12.20 - 13:43
(26) нет это для динамической печати, чтобы через РС можно передавать в любой реквизит формы обработки (которая печатает) предопределенное значение
ну а чтобы юзверю проще было выбрать нужный реквизит хочу чтобы список их реальный вываливался, а не гадали как он называется или спрашивали
как-то так
 
 Рекламное место пустует
   acht
 
31 - 02.12.20 - 13:43
(24) Я те ща страшную вещь скажу. Чтобы получить из элемента формы путь к данным для понимания что это такое - придется на сервер идти. Ну и начинай все сначала.
   Fragster
 
32 - 02.12.20 - 13:51
(30) а как ты решиш проблему, когда поле ввода имеет заголовок "клиент", а реквизит - "контрагент"? пользователю понятнее от этого не станет.
я бы все равно реализовал в виде экспортного метода формы возврат списка реквизитов (с заголовками и типам) которые _могут_ настраиваться, т.е. те, которые прям являются программным интерфейсом. потому что не всегда прям ВСЕ элементы можно настраивать. и еще один метод, принимающий структуру и распихивающий значения по нужным местам (+ выполняющий возможно другие необходимые обработчики). потому что в форме происходит не всегда тупая установка реквизитов,а иногда вызываются обработчики выбора, изменения, связи параметров выбора всякие срабатывают и прочее, и прочее.
   Fragster
 
33 - 02.12.20 - 13:51
решишь
   seraf
 
34 - 02.12.20 - 13:57
(32) по полю ввода не решу конечно, по точному имени реквизита решил бы, в том и загвоздка, думал элементарного чего не знаю как из список получить
   Kassern
 
35 - 02.12.20 - 13:59
Можно конечно таким вот  способом извратиться))
1)Открываем из нашей формы, нужную форму обработки
2)ПриОткрытии в обработке формы пишем, если владелец = форма для получения реквизитов тогда на сервере получаем массив реквизитов, пихаем его в хранилище и адрес возвращаем ОповеститьОВыборе(Адрес) ну и конечно Откраз=истина; Форма так и не откроется по факту, а адрес с массивом передастся в обработку оповещения формы владельца.
3) в обработке оповещения получаем из хранилища массив реквизитов. Профит! Бинго! Костыль! Ну да ладно...
   seraf
 
36 - 02.12.20 - 14:06
(35) примерно туда и думаю уже раз иного не нашлось
   seraf
 
37 - 02.12.20 - 14:07
(35) проблема в том что этих форм обработки три десятка и еще будет, в каждую надо лезть.
да ну нафиг всё это)
   Kassern
 
38 - 02.12.20 - 14:31
(37) Тогда общие элементы с отбором тебе в помощь)
   lodger
 
39 - 02.12.20 - 15:43
(37) ну сделай расширение. туда перехватываешь все встроенные обработки.
во всех дополняешь метод ОбработкаОповещения и добавляешь одну контекстную серверную функцию.

когда тебе надо получить реквизиты с другой формы пишешь Оповестить("ОтдайРеквизиты","ИмяЦелевойФормы")

в обработке оповещения
если ИмяСобытия = "ОтдайРеквизиты" И Параметр = ЭтаФорма.Имя Тогда
Оповестить("ОтдаюРеквизиты",ВернутьСтруктуруРеквизитовСоЗначениями());
конецесли;

&НаСервере
Функция ВернутьСтруктуруРеквизитовСоЗначениями()
// как то облазить реквизиты и собрать структуру, где можно навставлять имена, представления, типы значений и т.д.
конецфу
   Kassern
 
40 - 02.12.20 - 16:56
(39) А если обработка внешняя?


Список тем форума
Рекламное место пустует  Рекламное место пустует
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.