Имя: Пароль:
1C
1С v8
Общий код &НаКлиенте для нескольких управляемых форм
0 klis
 
16.04.15
18:35
Есть внешняя обработка с несколькими управляемыми формами. Все управляемые формы помимо всего прочего используют одинаковые механизмы. Кол-во форм и кода разрослось настолько, что поддерживать этот общий код (копипастить между формами) становится крайне не комфортно.
Насколько корректно будет создать еще одну форму, прописать экспортом нужные процедуры туда и пользовать из остальных форм? Может быть изобретено какое-то более адекватное решение?
1 H A D G E H O G s
 
16.04.15
18:36
(0) ОбщийМодуль
2 klis
 
16.04.15
18:39
(1) Обработка внешняя без привязки к конфигурации.
3 Kookish
 
16.04.15
19:35
(0) В качестве бреда: оставить одну форму, но менять видимость ее элементов (групп элементов) в зависимости от ситуации.
4 RomaH
 
naïve
16.04.15
20:47
(0) пример
5 Ma3eIIa
 
16.04.15
20:51
а не проще в модуле обработке ?
6 Котокот
 
16.04.15
20:53
(0) Через веб-сервисы ломиться к себе на сервак, там обрабатывать всю инфу и возвращать во внешние формы результат.
7 Ник080808
 
16.04.15
20:57
(0) самый оптимальный вариант в (3)
8 Ma3eIIa
 
16.04.15
20:59
а если подумать. то все что одинаковое оставить. все остальное создавать динамически. и не мучать себе мозг. форма одна. но да кода много
9 Ma3eIIa
 
16.04.15
21:00
(8) прикрутить макеты. где будут расписано формы. ммм. загнул
Хотя 1 раз сделать. а потом тупо скопировал макет и новая форма
10 Ник080808
 
16.04.15
21:17
(9) вот тоже о макете подумал) только как код обработчиков динамически формировать
11 Ma3eIIa
 
16.04.15
22:17
(10) молча. разметка. где группа где элементы. тип данных. можно и без гемера все в таблицу. только типы подставлять. ну тут так же макет в помощь
12 H A D G E H O G s
 
16.04.15
22:21
Сделать еще одну, общую форму - хранитель клиентского кода, без элементов управления.
13 Ma3eIIa
 
16.04.15
22:23
(12) так я же писал. что (8). а вот что по динамике. написать норм алгоритм. который из шаблона или шаблонов будет рисовать форму. я для проектирование мебли делал. то там было на толстом переписывал на тонкий. то вот рисовл. поле ввода и таблицу с параметрами. что было задано в параметре мебели
14 klis
 
16.04.15
22:40
(3)(8) Есть некоторые формы, экземпляры которых открываются произвольное количество раз (одновременно) с разными параметрами. В таких условиях, думаю, не прокатит. Генерить формы полностью динамически будет накладно...
(5) Нет у меня &НаКлиенте модуля обработки((
(12) Я это в (0) и предложил и как раз хотел бы уточнить, насколько это адекватно с точки зрения клиент-серверной философии)
15 Ma3eIIa
 
16.04.15
22:41
(14) почему накладно ?
16 Ma3eIIa
 
16.04.15
22:41
тыкаешь что тебе надо. а по параметрам создаешь ее...
17 Ma3eIIa
 
16.04.15
22:42
что бы не делать. мега сложную и дурную форму. при том. там на n количестве она падала на 8.2
18 RomanYS
 
16.04.15
22:49
(15) потому что внутри каждой процедуру придется создавать эту общую форму, а это вызов сервера
Или есть способы хранить на клиенте экземпляр другой формы?
19 H A D G E H O G s
 
16.04.15
22:53
(14) Генерить тонкие формы динамически вообще нельзя.
20 H A D G E H O G s
 
16.04.15
22:54
(18) Ты не поверишь.
21 Лефмихалыч
 
16.04.15
22:54
(0) если код общий, то накохер надо было разные формы делать? Объединяйте в одну форму со страничками да и всё
22 H A D G E H O G s
 
16.04.15
22:54
(21) Нельзя, загнется.
23 Ma3eIIa
 
16.04.15
22:56
(19) почему ? создание на сервере ? или я что то упустил
24 Ma3eIIa
 
16.04.15
22:56
(22) та да я ловил на 8.2
25 Лефмихалыч
 
16.04.15
22:59
(22) скуяли?
26 Ma3eIIa
 
16.04.15
22:59
(25) количество объектов. при более 40 падало
27 Ma3eIIa
 
16.04.15
23:00
(26) хотя видимость у 10-20. а ей пофиг
28 H A D G E H O G s
 
16.04.15
23:00
(25) Схерали.
29 H A D G E H O G s
 
16.04.15
23:01
(23) Кэширование на клиенте отключается тогда. Форма начинает гоняться при контекстных вызовах сервера.
30 Fragster
 
гуру
16.04.15
23:03
а что, разве в макет загнать обработку с формой с общими методами не получится?
31 Ma3eIIa
 
16.04.15
23:05
(30) +1 :)
32 H A D G E H O G s
 
16.04.15
23:05
(30) И дальше что?
33 Ma3eIIa
 
16.04.15
23:06
(29),(30) при создание создали и забыли. все остальное общие. где траблы ?
34 Fragster
 
гуру
16.04.15
23:06
(32)

ПриОткрытии
ОбщаяФорма = ПолучитьФорму..

ОбработкаКоманды
ОбщаяФорма.ЭкспортныйКлиентскийМетод(Параметры)
35 Ma3eIIa
 
16.04.15
23:08
(34) та можно все. в менеджер запихнуть. ну ... вы че. и там определять что открывать и когда и при каких параметрах. ну ужас
36 Ma3eIIa
 
16.04.15
23:12
(35) опять мимо.... ну ладно. упустим менеджер. но идея такая же :) все живет на сервере и в шаблонах. при создание формы. все равно сидим на сервере. вот там все и создаем. клиент отображает. и все
37 Ma3eIIa
 
16.04.15
23:12
(36)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    //Вставить содержимое обработчика
КонецПроцедуры
есть же такая штука....
38 Лефмихалыч
 
16.04.15
23:13
(36) вас там сколько за одним ником?
39 Ma3eIIa
 
16.04.15
23:14
(38) пока не плодились,а что?
40 klis
 
16.04.15
23:15
(21) Не код общий, а одинаковые механизмы. Самый тупой пример (выдуманный): есть процедура, которая умножает цену на количество и помещает результат в сумму по строке табличной части. Если есть колонка "Скидка", то и ее учитывает, но ее может и не быть. Могут быть разные формы - Товары, Услуги и т.п., но сумма у всех считается одинаково. Я вот про такой случай. А потом если вдруг хочу добавить, например, комиссию в расчет, мне надо по всем формам размножать это изменение вручную вручную.
41 Ma3eIIa
 
16.04.15
23:16
(38) пока не Амёба
42 Ma3eIIa
 
16.04.15
23:16
(40) а что с обработки это нельзя получить с сервера ?
43 Ma3eIIa
 
16.04.15
23:18
НаСервере
Функция пМакет()
Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
КонецФункции

и все будет работать,а вы тут сказки
44 Ma3eIIa
 
16.04.15
23:18
(43) а тут .ПолучитьМакет("Макет");  ваше нужное...
45 Лефмихалыч
 
16.04.15
23:18
(40) то, что ты описываешь, хранить во внешней обработке как-то не логично. Ну, а ежели уж решил хранить, то не хнычь, т.к. у тебя только два варианта - промышленная копипаста или дополнительная форма без элементов и с туевой хучей экспортных методов.

ЗЫ Но мне даже отсюда видно, что это уже сейчас тормозит и глючит
46 Лефмихалыч
 
16.04.15
23:20
(42) в функции может передаваться то, чего на сервере не существует и что туда передать технически не возможно. По этому ему нужен общий код &НаКлиенте
47 klis
 
16.04.15
23:24
(45) Спасибо за заботу, но я вроде не хныкал) Я как раз эти же оба варианта в (0) и расписал. Первый реализуется сейчас, второй пришел в голову в момент написания поста и я вот пытаюсь поинтересоваться, насколько он адекватен)
(42) См. (46) Да, Я говорю чисто про клиентский код.
48 Fragster
 
гуру
16.04.15
23:25
кстати, кто-нибудь знает, как правильно с данныеформыколлекция (таблица, дерево) работать во внеконтекстном вызове правильно? только перегонять в структуру со структурами и обратно?
49 Лефмихалыч
 
16.04.15
23:28
(48) на кой кол во внеконтекстном вызове данныеформыколлекция? ИМХО, весь смысл внеконтекстности теряется, когда ты начинаешь мегатонны данных на сервер гонять руками.
50 RomanYS
 
16.04.15
23:31
(20) как именно?
(34) не работает без уточнения, что там "ОбщаяФорма"
51 RomanYS
 
16.04.15
23:55
(50) как в контексте формы хранить экземпляр другой формы?
- переменные формы не работают
- для реквизита формы нет подходящего типа
- во временное хранилище не засунешь - нет представления

(20) скажи как - может всё таки поверю
52 klis
 
17.04.15
00:08
(51) Переменные не нужны, нужны только методы. Эдакая эмуляция модуля менеджера.
53 RomanYS
 
17.04.15
00:12
(52) понятно, что нужны методы
Только как обойтись без создания этой общей формы при каждом вызове команды? Каждый раз создавать форму = вызов сервера.
54 Euguln
 
17.04.15
00:21
В порядке бреда: код в макет и Выполнить()
55 H A D G E H O G s
 
17.04.15
00:32
(53) Засунуть в глобальную переменную модуля формы реципиента
56 RomanYS
 
17.04.15
08:10
(55) проверил первым делом - не работают глобальные переменные формы. Даже экспортные, 8.2 УФ.

Перем ОбщаяФорма Экспорт;

&НаКлиенте
Процедура Команда1(Команда)
    Сообщить(ОбщаяФорма._1());
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ОбщаяФорма = ПолучитьФорму("ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1");
КонецПроцедуры


{Форма.Форма.Форма(5,11)}: Переменная не определена (ОбщаяФорма)
    Сообщить(<<?>>ОбщаяФорма._1()); (Проверка: Тонкий клиент)
57 Ник080808
 
17.04.15
09:12
(56) реквизит формы?
58 klis
 
17.04.15
11:21
(56)

А если так?

&НаКлиенте
Перем ОбщаяФорма;
59 H A D G E H O G s
 
17.04.15
11:27
(58) Не все опытные погроммисты 1С читают СП.
60 H A D G E H O G s
 
17.04.15
11:28
Это относится к (56) (57)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс