Имя: Пароль:
1C
1С v8
Модули управляемого приложения: культура использования
,
0 jsmith82
 
28.09.11
19:34
Вопросы на засыпку
Вопрос №1
когда нужно ставить флажок "Вызов сервера", а когда нет
Вопрос №2
когда нужно использовать
-модуль менеджера
-выделенный общий модуль <ИмяПрикладногоОбъекта>Сервер
Вопрос №3
коргда нужно использовать
-модуль формы
-выделенный общий модуль <ИмяПрикладногоОбъекта>Клиент
Есть какие-то базовые принципы? Кто как думает?
1 jsmith82
 
28.09.11
19:40
Пример №1
Функция "ПолучитьЦенуНоменклатуры"
По методике 1С нужно создать отдельный общий модуль а-ля "ЦеныИВалюты"
Если же мыслить по ООП, хочется затолкать эту функцию в состав методов прикладного объекта.
Ну, например, создать общий модуль "ЦеныНоменклатурыСервер" (от прикладного объекта регистр сведений "Цены номенклатуры")
В данном случае модуль менеджера явно не используется ввиду недоступности его на стороне клиента
2 jsmith82
 
28.09.11
19:43
Пример №2. Типовой код УТ11
Функция "ПолучитьШтрихкод"
В форме есть метод "НаКлиенте". Он обращается к методу формы "НаСервере". Тот обращается к методу модуля менеджера регистра сведений "Штрихкоды номенклатуры"
3 SoftIce
 
28.09.11
19:46
Вопрос №1
Флаг вызов сервера нужно ставить если экспортные функции данного модуля будут вызываться из модулей исполняющихся на клиенте
4 SoftIce
 
28.09.11
19:48
Категорически не рекомендуется ставить этот флаг у модулей с флагом Привелигерованный
5 jsmith82
 
28.09.11
19:48
(3) это очевидно
просто в типовой УТ 11 бывает, что метод из общего модуля с вызовом сервера вызывае метод-дубль из общего модуля без вызова сервера (якобы в целях безопасности, я так понял)
6 Mort
 
28.09.11
19:49
Начнем с того что делать такие модули:
<ИмяПрикладногоОбъекта>Клиент, <ИмяПрикладногоОбъекта>Сервер

это ФУ
7 Mort
 
28.09.11
19:51
Если имелось ввиду:

<АбстрактноеСобирательноеИмяМножестваОбъектов>Клиент

то вопросы 2 и 3 отпадают сами собой.
8 jsmith82
 
28.09.11
19:54
(6) почему ФУ
9 jsmith82
 
28.09.11
19:56
(6) например, метод, исполняемый на сервере, относится только к одному прикладному объекту
почему бы не засунуть его в <ИмяПрикладногоОбъекта>Сервер
10 Mort
 
28.09.11
19:57
(8) Потому что так они не нужны. Выносить в отдельный модуль функции, которые вызываются только из одного модуля нецелесообразно даже в целях рефакторинга.
11 jsmith82
 
28.09.11
19:59
(8) понятно. мои вопросы базируются на идеологии ООП. с точки зрения производительности, ты прав
12 Mort
 
28.09.11
20:00
(11) Считай модули содержат открытые функции базовых классов.
13 jsmith82
 
28.09.11
20:00
Вопрос №2 волнует больше всего
14 Mort
 
28.09.11
20:02
+(12) А если объект один (т.е. нет подобных ему) то выделять из него какой-то базовый класс со своими методами это ниочем. Собственно это и порождает вопросы 2 и 3.
15 Mort
 
28.09.11
20:08
А Модуль менеджера считай перегрузкой виртуальных функций базового класса (как Печать(), например), если тебе "идеология ООП" ближе. А вообще вопросы какие-то. Словно затерялся в трех березах.
16 jsmith82
 
28.09.11
20:09
(14) я отношусь к ним не как к методам базовых классов
например, "ПолучитьШтрихкод"
судя по твоей философии, ты считаешь, что метод относится к иному, несвязанному родством классу
я же трактую его как метод того же класса
вопрос возникает оттого, что плафторма не обеспечивает явной инкапсуляции данных (вечный бич 1С)
судя по твоей философии, ты считаешь, что свойства платформы явно намекают на то, что вынос кода в иные модули предполагает создание иного класса
17 jsmith82
 
28.09.11
20:10
я не затерялся в трёх берёзах
конечно же, у меня есть своя культура кодинга, и она очень стройная
но мне любопытно как это делают другие
18 SoftIce
 
28.09.11
20:10
Вопрос №2
Модуль менеджера новый объект. Появился только в 8.2. В модуле менеджера можно переопределить стандартное событие ОбработкаПолученияДанныхВыбора.
А также дополнять функционал менеджера объекта конкретного вида собственными методами. К примеру, если в модуле менеджера справочника Номенклатура создать экспортный метод, например ПолучитьСписокНоменклатуры() и в ней получить список номенклатуры по какому то фильтру. То к этому методу можно обращаться из-вне создав менеджер этого объекта. в нашем случае Справочники.Номенклатура.ПолучитьСписокНоменклатуры()
19 Reaper_1c
 
28.09.11
20:10
№2
Модуль менеджера использовать для собственых методов, описывающих функционал непосредственно связанный с функционалом класса но не требующий модификации данных. Т.е. печать, получение специфической информации связанной с классом. Основной смысл - передача таким методам ссылки или массива ссылок на объекты без инициализации объекта.
"выделенный общий модуль <ИмяПрикладногоОбъекта>Сервер" не использовать никогда, для этого есть модуль объекта.
20 SoftIce
 
28.09.11
20:15
(19) для печати тоже лучше использовать модуль объекта, поскольку печать связана с конкретным объектом.
21 Reaper_1c
 
28.09.11
20:17
(20)Особенно это умно при групповой печати - для каждого распечатываемого документа за каким то ладаном инициализировать весь объект. А ведь можно просто из менеджера распечатать список ссылок.
22 SoftIce
 
28.09.11
20:19
(21) для групповой печати - согласен. Хотя можно наверно и для обычной тоже использовать. Надо попробовать.
23 Mort
 
28.09.11
20:20
(16) Открой, например, БП КОРП 3.0 бету. одни названия модулей говорят.
Например "ОбработкаТабличныхЧастей", чем не сбор функций базового класса объектов содержащие однотипные ТЧ? Или "ДенежныеСредства". Но никто не делает модулей по одному на объект.


(21) +1 Угу. Особенно радует когда уже прочитанный объект оформляет запрос к самому себе для получения данных.
24 jsmith82
 
28.09.11
20:23
(19)
ну тогда разъясни вот что
как из клиента вызывать метод модуля менеджера (статический) или модуля объекта (динамический)
делать в форме дубль-метод с директивой НаСервере?
25 jsmith82
 
28.09.11
20:24
(23) да я никак не отрицаю сущестование "абстрактных множеств". они очевидны и многочисленны
26 jsmith82
 
28.09.11
20:26
Дилемма
1. дубль-метод в форме с директивой НаСервере
2. прямой вызов из клиента в модуль ИмяПрикладногоОбъектаСервер
27 Reaper_1c
 
28.09.11
20:27
(24)Да, делать дубль с директивой "НаСервере". Хотя на практике "дублей" не возникает, потому как методов заточенных именно под задачи формы и интерактивной работы со зверьем я в менеджере не держу. Форма - один из многих клиентов программы, а менеджер должен быть развернут лицом ко всем клиентам, а не только формам.
28 Mort
 
28.09.11
20:31
(24) Модуль объекта легко, а модуль менеджера зачем вызывать?
29 jsmith82
 
28.09.11
20:34
ну как это зачем..
тут же говорили, что в модуле расположены статические методы класса
ладно, всё понятно
общий тренд ясен
спасибо, в споре почерпнул нужное видение
30 jsmith82
 
28.09.11
20:38
хах. вот будет прикол, если в 8.3 (или в 9.0) внедрят ООП
31 Reaper_1c
 
28.09.11
21:31
(30) Не внедрят. Разве что весь нынешний состав методистов перебьют и тогда, лет через десять после этого геноцида если их место займут совсем упоротые идиоты 1С получит ООП.
32 jsmith82
 
29.09.11
08:25
(31) ты считаешь ООП в 1С идиотской упоротостью?
33 H A D G E H O G s
 
29.09.11
08:30
(32) И не он один.
34 jsmith82
 
29.09.11
08:49
а пщиму, объясните непонимающему
35 jsmith82
 
29.09.11
08:49
если не в падлу конеш
36 Mort
 
29.09.11
09:03
(35) Да все просто. Кодеры считают ООП только там имеет место, где пишутся слова class private и static, либо подобные им. В 1С этих слов нет. То что в 1С все давно пользуются огромной кучей типов, какбы ниочем не говорит.
37 jsmith82
 
29.09.11
09:13
(36) согласен
38 Jolly Roger
 
29.09.11
09:19
(34) людям свойственно бояться непознанного...
39 5 Элемент
 
29.09.11
09:25
Придумайте как вендору заработать на ООП и будет вам счастие