Имя: Пароль:
1C
1С v8
В чем разница между серверным контекстом модуля формы и модулем объекта?
,
0 MonteCarlo
 
20.05.19
14:43
Добрый день, господа-айтишники и дамы-айтишницы. Задался вопросом, а где лучше размещать функцию - в модуле объекта или в модуле формы с директивой &НаСервере?
1 Fragster
 
гуру
20.05.19
14:44
да.
2 butterbean
 
20.05.19
14:44
оооо, а ведь есть еще модуль менеджера....
3 Вафель
 
20.05.19
14:44
в модуле менеджера
4 ДенисЧ
 
20.05.19
14:44
Смотря что ты потом с этой функцией собираешься делать. Иногда нужно и в модуль менеджера её пихать...
5 MonteCarlo
 
20.05.19
14:47
(3) (2) Ну-ка приведите пример, когда одну и ту же функцию можно разместить и в модуле менеджера и в модуле формы.
7 MonteCarlo
 
20.05.19
14:48
(4) Не берем в расчет те функции, которые мне нужно вызывать у объекта. Возьмем какой-нибудь код, который что-то делает для общего алгоритма на сервере. Я могу разместить его и в форме и в модуле объекта. Вызываться будет только из формы. Вот в этом случае есть смысл выносить его в модуль объекта нет?
9 Жан Пердежон
 
20.05.19
14:56
(7)
если это алгоритм бизнес-логики - в модуле объекта/общем модуле.
если алгоритм исключительно функционала польз.интерфейса (и форма при этом одна) - в модуле формы;
10 MonteCarlo
 
20.05.19
15:00
(9) Ну вот, конструктив пошел.
Вот об этом я и спрашиваю. Вы говорите, что если это алгоритм бизнес-логики, то в модуль объекта/общий модуль выносить. Но этот же код можно и в форме оставить? Почему надо выносить? Просто чтобы придерживаться общего стиля или с точки зрения оптимизации есть разница?
11 Cyberhawk
 
20.05.19
15:02
Метод контекстный?
12 Вафель
 
20.05.19
15:03
(5) любую, только вызывать ее придется из серверной функции модуля.
те добавится еще 1 переход
13 Жан Пердежон
 
20.05.19
15:05
(10) как минимум, чтобы бы меньше икалось, когда потом нормальному программисту надо будет программно обработать кипу таких объектов без плясок с бубном вокруг форм: попробуй в ЗУПе отпуск программного создать/заполнить/провести.
14 Вафель
 
20.05.19
15:05
нужно мыслить тестами. сможно будет твою бизнес логику протестировать без открытия форм?
должно быть можно, а не как в ЗУПе
15 MonteCarlo
 
20.05.19
15:07
А если это внешняя обработка. Запускаться будет только интерактивно. Я понимаю, как нужно размещать функцию в зависимости от её использования. Я имею ввиду те случаи, когда функция спокойно может жить в модуле формы. Есть смысл её вытаскивать в модуль объекта или нет?
16 sqr4
 
20.05.19
15:14
(8) дерзкий тип...
https://xn----1-bedvffifm4g.xn--p1ai/articles/модули-в-платформе-1с-предприятие-8-3/#point5
ты хотябы что то читал? или сразу про мамок писать начал
17 MonteCarlo
 
20.05.19
15:28
(16) Если ты не заметил, этот товарищ меня на х.. послал двумя сообщениями выше. С людьми такого типа разговор только на их языке.

Да, я читал по теме статьи, в том числе и ту, которую ты привел. Я еще раз подчеркиваю, я понимаю как лучше разнести код с точки зрения его использования. Но вот, например, я пишу внешнюю обработку, которая будет обрабатывать данные, что-то делать. Я могу всю логику написать в модуле формы, а могу написать в модуле объекта и вызвать этот метод из формы. Вот и спрашиваю, есть ли разница существенная или нет.
18 Кодер
 
20.05.19
15:30
Пиши код один раз. Если он нужен в одном объекте - не надо тащить это в глобальник. Если он нужен в 2 документах, не плоди копии, но поднимай их выше.
19 elCust
 
20.05.19
15:32
(15) >> Я могу всю логику написать в модуле формы, а могу написать в модуле объекта и вызвать этот метод из формы

В УФ вы не можете вызвать из модуля формы метод размещенный в модуле объекта без изврата. Директива &НаСервере одинакова для модуля формы и для модуля объекта.
20 Вафель
 
20.05.19
15:33
(15) любая функция может спокойно жить где угодно
21 MonteCarlo
 
20.05.19
15:35
(19) Я знаю, что нужно переносить данные формы в значение и вызывать метод у объекта. Вопрос как раз в том, можно ли логику оставлять в форме. С УФ работаю год, раньше в толстом клиенте особо не заморачивался и писал всё в форме.
22 MonteCarlo
 
20.05.19
15:36
Короче ваш посыл понял, закрываем тему.
23 elCust
 
20.05.19
15:38
(21) >> Вопрос как раз в том, можно ли логику оставлять в форме

А, кто запретит. Если этот метод используется только в этой форме, да ради бога, пусть живет там. Другое дело, если это универсальный метод, тогда бы ему место было бы или в модуле менеджера или в общем.
24 MonteCarlo
 
20.05.19
15:39
(23) Понятно, что никто не запретит. Может с точки зрения стиля программирования 1с, лучше выносить в модуль. Я вот почему интересовался.
25 Вафель
 
20.05.19
15:40
с точки зрения стиля то скорее всего твой код полное г...
26 MonteCarlo
 
20.05.19
15:42
(25) Я вот не понимаю таких людей, которые вместо того, чтобы ответить по теме или промолчать, начинают переходить на личности.
Ты утешил своё самолюбие? Умничка, ты самый лучший... Иди дальше писать свой золотой код. Очки только надень, а то ослепнешь....
27 Вафель
 
20.05.19
15:46
(26) так вопроса то и не было
28 Фрэнки
 
20.05.19
15:48
(17) Внешние обработки = пережиток прошлого.
29 sqr4
 
20.05.19
15:49
(17) интересно он просто так это сделал или на твое "Ну-ка"
30 MonteCarlo
 
20.05.19
15:54
(29) То есть для тебя выражение "Ну-ка" = "Иди нах.."? Есть смысл в нашем дальнейшем диалоге? По теме хотите ещё что-то сказать или на личности сразу перейдём?
31 elCust
 
20.05.19
15:55
(28) Консоль запросов весьма удобный пережиток даже ныне.
32 Фрэнки
 
20.05.19
15:59
(31) я к тому, что их намного удобней реализовать в виде расширения конфигурации.
33 elCust
 
20.05.19
16:01
(32) Это я понял. Расширения вещь!
34 MonteCarlo
 
20.05.19
16:02
(32) А вот вопрос вдогонку. Обновлять расширения динамически так же "безопасно" как и основную конфигурацию?
35 Жан Пердежон
 
20.05.19
16:03
(32) в том числе разовые обработки?
36 MonteCarlo
 
20.05.19
16:05
(35) Да даже если не разовые. Например, обработка, которая включает или отключает историю данных. Зачем мне ее встраивать в расширение, когда лучше написать внешней и использовать для разных баз.
37 MonteCarlo
 
20.05.19
16:05
(35) (36) Консоль запросов из той же оперы.
38 sqr4
 
20.05.19
16:07
(30) тебе ответили на твоем же языке
39 MonteCarlo
 
20.05.19
16:10
(38) Я никого не оскорблял. Если для тебя это одно и то же, я тебе сочувствую.
40 sqr4
 
20.05.19
16:11
(39) ты даже в этом посте попытался меня оскорбить. Твой ответ на это был еще менее адекватным. ОФФ, я закончил.
41 hhhh
 
20.05.19
16:13
(39) как это не оскорблял? Это больше чем оскорбление: ну-ка сбегай, принеси. Как к собачонке.
42 Фрэнки
 
20.05.19
16:13
(34) а них нет другого способа запуска - только динамический старт вдогонку к основной
43 MonteCarlo
 
20.05.19
16:19
(41) Послушайте... Человек написал не по теме. Для кого-то это форум развлечений, а кто-то приходит за ответами. Я задал вопрос, человек начал писать про модуль менеджера. Причем писал в высокомерной манере. Я спросил про модуль объекта и модуль формы. Зачем показывать свою надменность полуответами-издёвками? Вам тоже скажу. Если Вам есть, что написать по теме, пишите. Если просто поболтать хотите, то пожалуйста, заведите тему отдельную, я с удовольствием с Вами поболтаю там.
44 MonteCarlo
 
20.05.19
16:20
(40) Не выдумывай.
45 sqr4
 
20.05.19
16:21
(43) так вот в твоем случае переноса обработки в расширении, переносить функции которые будут загружать данные или что то печатать, угадай куда лучше переносить?)
46 Фрэнки
 
20.05.19
16:24
(45) А он скажет, что Расширение это ересь и он по православному их использовать не будет, а потому намеки на модуль менеджера ему не интересны :-)
47 trad
 
20.05.19
16:27
(43) "Зачем показывать свою надменность полуответами-издёвками"
Правильно. Показывать свою надменность нужно открытым текстом.
48 MonteCarlo
 
20.05.19
16:27
(45) Если я эту функцию буду использовать только из формы какая разница внешняя это обработка или внутренняя?
49 MonteCarlo
 
20.05.19
16:28
(47) Общаться нужно только по теме, максимально уважая друг друга. А большинство людей на этом форуме просто самоутверждаются за счет других.
50 Вафель
 
20.05.19
16:30
(49) тебе ответили сразу же, но чего то еще ждешь.
А раз ждешь, то получи ...
51 lodger
 
20.05.19
16:30
(48) завтра заказчик скажет перенести эту функцию в еще пяток документов.
ладно, не завтра. ладно, вы уже уволились по старости на пенсию. но кому-то придется переделывать, тогда как можно было разместить функцию туда, откуда ее можно многократно использовать в разных контекстах. не забывайте, помимо интерактивной работы с объектами 1с есть еще и программная работа с объектами, кодом.
52 Жан Пердежон
 
20.05.19
16:31
(42) не совсем https://wonderland.v8.1c.ru/blog/rasshirenie-dannykh/
(49) сам себе противоречишь, тебе ответили в выбранной тобой манере (5), чего теперь обижаться?
53 trad
 
20.05.19
16:32
(49) Уважаемый человек Вафель, к твоим двум вариантам в вопросе, предложил свой третий.
Ты к нему обратился "Ну-ка"
Это по твоему "максимально уважая друг друга" ?
54 MonteCarlo
 
20.05.19
16:36
(51) Вот в том случае, когда программный вызов метода не нужен, есть ли разница между размещение логики в модуле формы и модуле объекта (кроме того, что из модуля объекта вызывать придется после преобразовать данных формы)?
55 MonteCarlo
 
20.05.19
16:38
(53) Я не просил предлагать третий вариант. Я спросил разницу между двумя. Я не считаю "ну-ка" за оскорбление. И уж тем более не считаю приемлемым посылать человека нах..
56 sqr4
 
20.05.19
16:40
(54) Есть
57 MonteCarlo
 
20.05.19
16:41
(56) Какая?
58 Вафель
 
20.05.19
16:45
(51) преждевременное обобщение - корень многих бед
59 Cyberhawk
 
20.05.19
16:49
(54) Нет никакой разницы. Где-то это хорошо зайдет, где-то придется переделывать по сравнению с тем, когда выбрал бы второй (другой) вариант. Определяется это лишь степенью твоей везучести принимать такие решения.
60 MonteCarlo
 
20.05.19
16:50
(58) Вот видите. Всё-таки есть разные мнения по этому поводу. Кто-то сторонник того, чтобы всё выносить на уровень выше. Я больше придерживаюсь подхода, то что не нужно везде, не нужно и вытаскивать. Вопрос был больше про оптимизацию. С этой стороны какая-либо разница есть? Если нет, то всё упирается в то, будут ли использовать эту функцию в будущем в другом контексте или нет?
61 Cyberhawk
 
20.05.19
16:53
(60) Все зависит от (11)
62 MonteCarlo
 
20.05.19
16:54
(60) Я поискал в гугл общение по этому вопросу и не нашел не единого упоминания о том, что ненужно всю логику размещать в форме, если этот код не будет использоваться в другом контексте. Решил поднять эту тему, чтобы убить её у себя в голове раз и навсегда. Подозревал, конечно, что на этом форуме обязательно найдутся люди, которые будут стебаться. Но вот что нах.. пошлют, это перебор. Если считаешь, что человек глупый, задал неправильно вопрос, недочитал что-нибудь, ну так просто промолчи, если не хочешь помочь. Зачем грубить?
63 Вафель
 
20.05.19
16:55
(62)  слышал про паттерн MVC ?
64 novichok79
 
20.05.19
16:58
(60) если обработка, то по-хорошему, все в ее модуль. чтобы при использовании обработки на сервере можно было использовать ее функционал.

в идеале, как вижу это я без гугла и ИТС:
модуль формы - интерфейс-взаимодействие + вызовы серверных процедура для реализации интерфейса
модуль объекта - серверная неинтерфейсная часть обработки.
модуль менеджера - это как бы функции класса (класс = объект метаданных в 1С).
общие модули - куски функционала по назначению без связи с объектом 1С.
65 MonteCarlo
 
20.05.19
17:01
(63) Нет, до паттернов не добрался к сожаленью. Все ли используют этот паттерн применительно к разработке на 1с?
66 Sysanin_1ц
 
20.05.19
17:02
(28) С чего это обработки пережиток прошлого? Это единственная возможность использовать элементы ООП в 1с, причём независимый от конкретной конфигурации
67 MonteCarlo
 
20.05.19
17:02
(64) Ну вот. Это Вы сами к такому разделению пришли (по части модуля формы и модуля объекта) или где-то описаны такие рекомендации? Неинтерфейсную логику же можно же и в модуле формы разместить.
68 sqr4
 
20.05.19
17:02
(65) а про че там?
69 MonteCarlo
 
20.05.19
17:04
(68) Model-View-Controller (MVC, «Модель-Представление-Контроллер», «Модель-Вид-Контроллер») — схема разделения данных приложения, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер — таким образом, что модификация каждого компонента может осуществляться независимо[1].
70 H A D G E H O G s
 
модератор
20.05.19
17:05
Чет дикая ветка тематическая.
Прошу участников успокоится.
71 sqr4
 
20.05.19
17:09
(69) ну вот, а что тебе еще от форума нужно? Сейчас должно быть понятно в чем разница или нет до сих пор или другие мотивы?
72 novichok79
 
20.05.19
17:12
(67) я пришел к этому сам. форма - это как бы view, на ней и должен висеть только view.
73 MonteCarlo
 
20.05.19
17:12
(71) Друг, со всем  своим уважением к тебе, ты можешь хоть одно мое сообщение прочитать вдумчиво? Я и спрашивал у форума, есть ли какая-то разница с точки зрения исполнения кода платформой 1с или дело только в стиле-паттернах-привычках-хорошем тоне-чьей-то договоренности.
74 MonteCarlo
 
20.05.19
17:21
(71) (51) (25) А еще кроме желания писать "золотой код", есть еще интересы бизнеса, которому всё-равно как код работает, главное чтобы работал. Программисту платят за решение проблем, а не за паттерны. Если бизнес требует функционал, какой толк сразу думать о том, как будет через год-пять-десять. Эта идея может вообще не стрельнуть и весь ваш золотой код на паттернах нафиг никому не нужен будет. Рефакторинг на то и нужен, чтобы приводить код в порядок со временем.
75 sqr4
 
20.05.19
17:25
(73) в сообщение номер какое ты это написал, друг? Поднял глаза на (0) там вообще ничего нет, к чему можно было вдуматься. (74) Что? Когда будешь на работу устраиваться, обязательно прогони эту телегу)
76 sqr4
 
20.05.19
17:27
(74) для мелких говнопроектов, оно и верно. На крупных разработках с такой логикой, пинка под зад и все дела.
77 MonteCarlo
 
20.05.19
17:32
(76) Я не говорю про проекты внедрение ERP систем. Я тебе говорю про задачи, которые ты решаешь в уже существующей системе по требованию бизнеса. Пока ты будешь писать золотой код и подкладывать везде соломку, я напишу говнокод по быстрому, запущу в продакшн, и бизнес обкатает саму идею. Если идея приживется, тогда имеет смысл оформлять код по паттернам, чтобы его можно было сопровождать. И это не просто слова. Это реальность. Не все бизнесы-гиганты, есть и мелкие, поверь.
78 sqr4
 
20.05.19
17:35
(77) в резюме так и укажи - "Пишу говнокод по-быстрому")
79 sqr4
 
20.05.19
17:36
(77) А дальше пошла утопия) Лан все я же закончил с офф топом в этой теме)
80 MonteCarlo
 
20.05.19
18:00
(78) (79) Ты опять читаешь не вдумчиво. Ты видишь только черное и белое, а 253 оттенка серого не видишь. Ну и ладно. Удачи.
81 MonteCarlo
 
20.05.19
18:03
Всем спасибо за дискуссию. Если кого-то обидел своим "ну-ка", прошу прощения, не со зла.
82 Сияющий в темноте
 
20.05.19
19:09
В модуле обтекта нет формы,но можно вызываться везде,где обьект доступен.
83 echo77
 
20.05.19
21:55
(0) Только сегодня было https://its.1c.ru/db/v8std#content:630:hdoc
84 Фрэнки
 
20.05.19
22:56
(66) // С чего это обработки пережиток прошлого?

Я пишу - _внешние_ обработки пережиток прошлого
85 Фрэнки
 
20.05.19
23:02
(52) что значит в ссылке "не совсем" - я знаю о том, что в расширении есть данные и статью эту уже видел раньше.
Не увидел в этой статье ничего существенного о динамическом применении расширения к базе.
86 vde69
 
20.05.19
23:40
(0)

придерживайся следующих правил

1. Код модуля и в том числе формы должен быть читабелен. Это означает, что в нем должна обрабатыватся только бизнес логика элементов управления, обработчики, перехватчики, заполнения элементов, управление реквизитами и т.д,
2. Стремись делать систему расширяемой. Это означает, что между интерфейсной логикой (в основном клиентской) и бизнес логикой (в основной серверной) должен быть минимальной (бутылочное горлышко), несколько вызовов, это позволит легко изменить и расширить любую из частей не трогая остальные.
87 Сияющий в темноте
 
21.05.19
08:39
Особеннось внешних обработок для управляемых форм в том,что модуля обьекта,как и самого обьекта нет.
при вызове с формы прилетает структура с данными обьекта,а код модуля заново компилируется при вызове метода РеквизитФормыВЗначение.
Поэтому,размещать в модуле обьекта можно только тот код,который очень редко вызывается.
Кстати,БСП позволяет код из модуля обьекта вызывать через фоновое задание,когда внешняя обработка загружена в справочник,но тут создается отдельный экземпляр обработки,но этот случай,пожалуй,единственный,когда модулем формы не обойтись.

У формы,кстати,можно сделать экспортные методы,правда,на клиенте,но их можно будет дернуть из другой формы через обьект форма,так что бояться того,что код не вызвать,не надо.
вот из фонового задания код внутри формы не вызвать,если с ComОбьектами не играться.
88 Сияющий в темноте
 
21.05.19
08:41
Расширения расширениямм.
Нл,например,задачу в конфу добавить в расширении нельзя.
И вообще,подводный камень-расширение не активно,запись в таблицу невозможна,чем отличается от того,что база не запускается?
89 MonteCarlo
 
21.05.19
09:32
(83) О, спасибо. Начал читать систему стандартов от 1с, но до этой статьи не дошел. Надо было сначал прочесть полностью, прежде чем задавать вопрос на форуме. Спасибо всем, кто адекватно реагирует на любые вопросы, даже глупые. Такие, слава богу, еще есть. Всем удачи.
90 fisher
 
21.05.19
10:54
Все комментарии не читал, поэтому возможно повторюсь.
Если в управляемой форме нужна функциональность, которая используется и при работе с объектом без использования формы, то для тонкого клиента размещать ее в модуле объекта неудобно, т.к. для ее вызова из формы потребуется внеочередное создание объекта. Остаются только общие модуля и модуль менеджера.
В модуле объекта удобно размещать только ту функциональность, к которой нет необходимости обращаться из управляемой формы.