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

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

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

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

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

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

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

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

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

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