Имя: Пароль:
1C
1С v8
Заполнение общей формы на сервере
0 СемёнКим
 
27.08.21
14:07
Всем привет.
Как получить форму на сервере и заполнить ее реквизиты, затем открыть, это все программно. Уже каша в голове по этой теме. На клиенте делал так:
Ф=ПолучитьФорму("ОбщаяФорма.<форма>");
Ф.Реквизит_1 = Значение_1;
...
Ф.Реквизит_n = Значение_n;
Ф.Открыть();

Или как вернуть с функции на сервере результат запроса в процедуру на клиенте?
1 ДенисЧ
 
27.08.21
14:11
"Как получить форму на сервере"

Очень просто. Никак.
2 eTmy
 
27.08.21
14:12
(0) как ты себе представляешь существование формы на сервере?)
3 VladZ
 
27.08.21
14:14
(0) Зачем?
4 VladZ
 
27.08.21
14:15
Передай параметры. При открытии формы проверяй.
5 СемёнКим
 
27.08.21
14:34
Решил через возврат массива с сервера делать и остальное так же как и на клиенте.
6 VladZ
 
27.08.21
14:35
(5) Может тогда уж  лучше структуру?
7 Мультук
 
гуру
27.08.21
14:37
(0) >>Или как вернуть с функции на сервере результат запроса в процедуру на клиенте?

Зачем все это на клиенте?
Чтобы нажать на кнопку и снова отдать на сервер?
Дык, засунь это во временное хранилище, на клиент отдай адрес.
8 СемёнКим
 
27.08.21
14:45
(6) разве не будет одно и то же? или все же через структуру быстрее будет?
9 Chameleon1980
 
27.08.21
14:49
через структуру ключи будут
10 СемёнКим
 
27.08.21
14:50
(7) В общем эта (общая) форма открывается при событии выбор по области табличного документа на форме документа. Через текущую область получаю значение по которому на сервере через запрос получаю остальные данные и после их загоняю в общую форму, чтоб клиент мог видеть что он там написал и изменить, если что. Так и получается, беру данные с сервера что то меняю и отправляю обратно на сервер.
А временное хранилище мне не нравится, нет над ним контроля и он точно ограниченный, насколько ограниченный не знаю
11 СемёнКим
 
27.08.21
14:52
(9) массивДанные = Новый Массив();
    Пока Выборка.Следующий() Цикл
        СтруктураДанных = Новый Структура("<поля выборки через запятую>");    
        ЗаполнитьЗначенияСвойств(СтруктураДанных,РезультатЗапроса);
        массивДанные.Добавить(СтруктураДанных);
    КонецЦикла;
так делаю.
12 Мультук
 
гуру
27.08.21
16:13
(10)

>>А временное хранилище мне не нравится, нет над ним контроля и он точно ограниченный, насколько ограниченный не знаю

Я его не знаю, я его не умею, я его боюсь.


P.S.

То что ты делаешь, делается через стандартные функции БСП

тз = запрос.выполнить().Выгрузить();
массивДанные = ОбщегоНазначения.ТаблицаЗначенийВМассив(тз);


P.P.S.
А передавать значения в общую форму, чтобы она сама получала данные и сама себя заполняла?
13 СемёнКим
 
28.08.21
09:57
(12) Спасибо за ответ.
тз = запрос.выполнить().Выгрузить();
массивДанные = ОбщегоНазначения.ТаблицаЗначенийВМассив(тз);

>>Я его не знаю, я его не умею, я его боюсь.
Да, именно так) Пока не знаком с временным хранилищем. Нужно приличное время выделить для изучения этого блока. А сейчас времени почти нет, клиент торопит, вот и приходится писать "говнокод" так как я умею.

>>А передавать значения в общую форму, чтобы она сама получала данные и сама себя заполняла?
Например, добавить реквизит на общ форму с типом динамический список, запросом вытащить необходимые поля по ключевым(период записи и измерения для регистра сведений) значениям и заполнить общ форму? Или есть более оптимальный способ?
14 acht
 
28.08.21
10:00
(13) > времени почти нет, клиент торопит, вот и приходится писать "говнокод"
Кстати, а как ты относишься, например, к обилию багов в Cyberpank 2077?
15 ДедМорроз
 
28.08.21
17:14
Во-первых,на сервере ничего открыть нельзя, формы открываются только на клиенте,но как ни странно,готовятся они на сервере.
Поэтому,если у вас данные,которые на сервере,нужно показать в форме,то их нужно передать в ее процедуру ПриСозданииНаСервере.
Самый простой способ - поместить их во временное хранилище,а его адрес передать в параметрах формы.
Если же данные получаются из базы,то ПриСозданииНаСервере самое место их получить.
Конечно,может быть ситуация,когда данные на клиенте,и на сервере их нет.
Тогда,стандартный механизм не подходит,но в процедуре ПриОткрытии новой формы можно обратиться к владельцу и вызвать его экспортную процедуру,которая позволит передать параметры,причем,в отличие от серверных вызовов,сериализация не требуется,можно передавать даже Com-объекты.

Опять же,форма,открывшая другую форму получает ее контекст как результат функции открытия и точно также может вызвать экспортную процедуру или функцию.
Но,такой механизм саиа 1с не одобряет и не использует.
16 СемёнКим
 
28.08.21
18:44
(15) Спасибо, учту на будущее.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс