|
Методический вопрос по оформлению экспортных процедур. | ☑ | ||
---|---|---|---|---|
0
VVi3ard
09.09.11
✎
14:34
|
В 8.2 столкнулся с неприятной особенностью вызов процедур объявленых в модуле объекта из модуля управляемой формы мягко говоря затруднён, я всегда стремился разрабатывать обработки так чтобы они предоставляли хотя бы подобие API.
Например(пример выдуманный и максимально простой): Обработка в которой можно выбрать список документов для которых выполнится пометка на удаление. В 8.1 архитектура была такая: В модуле обработки определены экспортные процедуры: Функция ПолучитьПустуюТЗСппискаДляЗаполнения() Процедура ВыполнитьПометкуНаУдалениеДляЭлементовТЗСписка(ТЗСписка) В форме обработки я при открытии получаю Пустую ТЗ и вывожу её на форму обработки, в обработчики нажатия на кнопку "Выполнить" вызываю процедуру ВыполнитьПометкуНаУдалениеДляЭлементовТЗСписка() передавая ей заполненное пользователем ТЗ Если же мне например в другой обработке понадобится удалить список документов я создам экземпляр этой обработки вызову метод ПолучитьПустуюТЗСппискаДляЗаполнения, заполню полученную ТЗ и вызову метод ВыполнитьПометкуНаУдалениеДляЭлементовТЗСписка. В 8.2. вызов процедуры модуля объекта приходится оформлять через северную процедуру определению в модуле Управляемой формы. пОбъект = РеквизитФормыВЗначение("Объект"); пОбъект.Тест(); ЗначениеВРеквизитФормы(пОбъект, "Объект"); В итоге код сложно отлаживать и на вызов каждой процедуры тратится дополнительное время. Собствено вопрос может есть какой то другой способ решения подобных задач? Вариант с ОМ не подходит т.к. обработка должна работать и в других конфигурациях где естественно нет нужного ОМ |
|||
1
Stepa86
09.09.11
✎
14:39
|
Не понял проблемы. Отличие 8.2 от 8.1 тока в создании доп. метода в форме обработки
|
|||
2
VVi3ard
09.09.11
✎
14:47
|
в 8.1. я мог из модуля формы напрямую взывать метод определённый в модуле объекта.
В 8.2. не могу. В итоге в 8.1 вся логика и обработка описывалась в модуле объекта, а интерфейсные обработчики и код свзяанный с интерфейсом (установка видимости и.т.п) находились в модуле формы. |
|||
3
VVi3ard
09.09.11
✎
14:51
|
(1) Отличие 8.2 от 8.1 тока в создании доп. метода в форме обработки
Вот это мне и не нравится получается некрасиво мы создаем доп метод только ради создания самого "доп. метода" этот доп метод везде делает одну и туже операцию Преобразование ЗначениеФормы->Объект и обратно. Хорошо когда у нас 1-2 таких доп методов а когда их 50-60 получается целая ферма однотипных процедур. Мне кажется я чего то не знаю, не могли 1С так поступить должно быть элегантное решение... |
|||
4
Maxus43
09.09.11
✎
14:54
|
(3) УФ придумал упоротый человек (с) отсюда
Это плата за то что сам рулиш где что выполняется, управляеш самой логикой клиента-сервера и вобще в 8.2 ты царь и бог :) |
|||
5
Maxus43
09.09.11
✎
14:54
|
вывод - меняй логику. уменьшай обращения на сервер, однотипные вещи выводи в общие модули и т.д., пользуйся внеконтекстными вызовами и т.д.
|
|||
6
Stepa86
09.09.11
✎
14:59
|
Если нужно обработать один параметр, юзаю команды.
Одна обработка делает что то одно и поэтому в ней нет кучи доп. методов для перенаправления вызова, а обычно 1-3. Если обработка будет работать только в этой базе и/или переносится напрямую, а не через сохранение в файл, то методы пишу в модуле менеджера, а ему передаю нужные параметры, а не использую контекст обработки. Вызов выглядит как Обработки.БожественнаяОбработка.СделатьЧудо(ПараметрЧуда1,ПараметрЧуда2) |
|||
7
VVi3ard
09.09.11
✎
15:12
|
(4) Дак какой же я царь если не могу сделать то что надо.
Мне вообще очень нравится что в 8.2. ужесточили ограничения это дисциплинирует и заставляет лучше продумывать логику приложения. т.е. деление Клиент/Сервер мне нравится а вот деление на Модуль Объекта/УФ вызывает недоумение. (5) Ну вот собственно говоря с чего всё началось нужно реализовать метод ПолучитьИмяФайла(параметр1,Параметр2) который по простому алгоритму изменяет переданные параметры и возвращает строку. Реально там 4 строчки кода. Если я реализую этот метод в модуле объекта то в модуле формы придется писать реализацию вызова которая больше чем реализация самого метода :( Пока писал ответ понял что ты и (6) хотел сказать, наверное действительно можно делать много мелких процедур в модуле объекта а затем делать обобщающие процедуры в том же модуле объекта которые уже и вызывать из модуля объекта. Совсем это фермы серверных вызовов не уберет но процентов на 40 сократит это точно. |
|||
8
banco
09.09.11
✎
15:16
|
а зачем писать в модуле объекта, пиши в модуле формы
|
|||
9
Maxus43
09.09.11
✎
15:20
|
Если используется только этой обработкой - то в моджуле формы, если нет - выведи в общий модуль
|
|||
10
VVi3ard
09.09.11
✎
15:27
|
(8) Это неверно модуль формы не должен содержать в себе логики приложения, если тебе понадобится какой либо метод из реализованных в объекте тебе достаточно создать объект и получить его метод, а если он будет реализован в форме то тебе придётся получать еще и форму.
Так же если у твоего объекта несколько форм то вызывать метод определенный в форме1 из формы 2 это неправильно и первый шаг к овнокоду. В моем понимании в модуле формы должен быть тот код который связан с интерфейсом по большей части это клиентский код. Вся логика и работа с данными должна быть описана в модуле объекта для того чтобы обработкой можно было пользоваться из другой обработки. Я привел пример обработки которой может пользоваться как пользователь так и другая обработка получая и заполняя структуры и взывая методы, т.е. что то типа API так как ООП это нзвать не получается. |
|||
11
Maxus43
09.09.11
✎
15:36
|
(10) Общие команды например для этого подойдут
|
|||
12
Maxus43
09.09.11
✎
15:43
|
кстати, это для вызова из этой же формы используеш такое:
пОбъект = РеквизитФормыВЗначение("Объект"); пОбъект.Тест(); ЗначениеВРеквизитФормы(пОбъект, "Объект"); из других мест "другая обработка получая и заполняя структуры и взывая методы" будет как ты хочеш работать |
|||
13
Jolly Roger
09.09.11
✎
16:04
|
(0) а чем обусловлен отказ от обычных форм? работаете по узкому каналу?
|
|||
14
Defender aka LINN
09.09.11
✎
16:06
|
Есть модуль менеджера.
|
|||
15
ado
09.09.11
✎
16:31
|
(13) Модно.
|
|||
16
VVi3ard
09.09.11
✎
16:31
|
(13) Есть такое в планах, т.к. разработка с 0 разумнее сразу всё делать на УФ.
(14) Да Модуль менеджера это вообще золотая штука мне в 8.1 его не хватало но он есть только в конфигурации а для внешних обработок само собой нет. Насколько я понял если ты пишешь обработку с использованием модуля менеджера то это значит что обработка уже не когда не сможет быть внешней без переписывания собственно обработки. |
|||
17
VVi3ard
09.09.11
✎
16:32
|
(15) Не ну реально какой смысл писать конфигурацию на старых формах тем более что в будущем явно возникнут запросы и на WEB интерфейс и на тонкого клиента через плохие каналы.
|
|||
18
VVi3ard
09.09.11
✎
16:34
|
Да и в целом концепция мне нравится вот только после 8 лет на 8.1 тяжело некоторые вещи понимаются.
|
|||
19
ado
09.09.11
✎
16:35
|
(17) А я что, против? Я никакого негативного смысла в слово "модно" не вкладывал.
|
|||
20
VVi3ard
09.09.11
✎
17:07
|
(19) Негатив в него вложило моё сознание :)
В моем понимании семантика слова мода: "что то не имеющее под собой реального основания". |
|||
21
Jolly Roger
09.09.11
✎
17:36
|
(16) ну что ж, раз есть реальная потребность... хотя, я бы сто раз подумал - может ну ее нафиг, эту моду...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |