Имя: Пароль:
1C
1С v8
где лучше писать код? в модуле формы или в модуле объекта?
, ,
0 Aydar
 
07.12.18
11:11
добрый день! Подскажите, пожалуйста, где лучше писать код? в модуле формы или в модуле объекта? и почему?
1 Гипервизор
 
07.12.18
11:14
А какое мыло лучше использовать: туалетное или хозяйственное?
2 Мыш
 
07.12.18
11:15
(1) Жидкое )
3 Aydar
 
07.12.18
11:15
(1) в плане быстродействия разницы нет?
4 Вафель
 
07.12.18
11:16
в модуле менеджера
5 HeKrendel
 
07.12.18
11:18
С таким подходом лучше не писать совсем
6 loololool
 
07.12.18
11:18
(3) От мыла к мылу быстродействие различается. Категория вот прям ни о чём не говорит.
7 Мыш
 
07.12.18
11:18
На самом деле лучше всего писать код на бумажке. Это стимулирует тщательнее обдумывать каждую строчку )
8 loololool
 
07.12.18
11:19
(0) В модуле общем.
9 loololool
 
07.12.18
11:20
Чо привязываться к объекту, буквы-то одинаковые - пусть все используют!
10 catena
 
07.12.18
11:24
(8)Глобальном. Единственном. Чтоб не запутаться.
11 Гипервизор
 
07.12.18
11:30
Если для вас быстродействие - единственный критерий, пишите на асме, че уж там.
12 FIXXXL
 
07.12.18
11:40
(0) а что за код пишем? создаем программно реквизиты? или документ проводим?
13 VladZ
 
07.12.18
11:48
(0) Код лучше всего писать там, где он будет использоваться максимально эффективно.
14 Мыш
 
07.12.18
11:50
(13) На клавиатуре банкомата.
15 Вася Теркин
 
07.12.18
11:51
Лучше писать на Мисте. Здесь все само исправиться...
16 Мыш
 
07.12.18
11:51
+(14) набрал 4 знака - получил деньги. Максимальная эффективность.
17 lodger
 
07.12.18
11:52
(0)
а) зависит от субъекта работы кода (элементы\реквизиты формы, реквизиты объекта, другие данные в бд)
б) зависит от контекста работы кода (происходит работа только с элементами\реквизитами формы\объекта ИЛИ используются данные бд)
в) зависит от размещения кода - только на клиенте или на сервере тоже.
18 Akela has missed
 
07.12.18
12:30
Если надо изменить именно этот объект - модуль объекта.
Если оперируешь только ссылками - модуль менеджера.
На форме только работа с формой.

Для проверки, все ли сделано как надо - надо смотреть, достаточно ли методов в модуле объекта и в модуле менеджера для того, чтобы создать объект программно.
19 Масянька
 
07.12.18
12:32
(0) На заборе: "Здесь был Вася."
20 FullMoon
 
07.12.18
13:16
(16) На кассе в столовой ещё эффективнее - набрал 4 цифры, получил тарелку супа минуя наличные деньги
21 loololool
 
07.12.18
13:16
(19) А мат между словами - кодом: FFA0EA... чтоб никто не догадался
22 loololool
 
07.12.18
13:16
(20) Это не наш метод! За тарелку-то супа...
23 Масянька
 
07.12.18
13:16
(21) Можно и в подписи :)
24 loololool
 
07.12.18
13:46
(23) Только если в квалифицированной цифровой. На весь забор, чтоб
25 Windyhead
 
07.12.18
14:01
На самом деле, в компании 1С тоже ни как не могут определиьтся воти пишут там и там, а некоторые еще не могут определиться нужен им клиентский модуль или серверный и указывают сразу и на клиенте и на сервере
26 lodger
 
07.12.18
18:47
(25) сразу и на клиенте и на сервере - означает что код должен одинаково работать как на клиенте, так и на сервере.
27 Pahomich
 
07.12.18
19:34
(0) Смотря кто пишет, программист или старший программист...
28 Asmody
 
07.12.18
19:48
В голове
29 Конструктор1С
 
08.12.18
04:49
В модуле формы должен быть только код, реализующий интерфейсную часть. Код, реализующий бизнес-логику, должен располагаться в модуле объекта, модуле менеджера и общих модулях.
30 Конструктор1С
 
08.12.18
04:54
Разрабатывая программу на Visual Basic, который тогда находился на раннем этапе развития, я с огорчением обнаружил, что язык не поддерживает встроенных способов разделения бизнес-логики, кода GUI и кода работы с БД. Я знал, что, если буду невнимателен, со временем некоторые из моих «форм» Visual Basic включат в себя код бизнес-логики, другие — код доступа к БД, а остальные не будут содер# жать ни того, ни другого — в итоге я не смогу вспомнить, какая форма за что отвечает. Я только что завершил работу над проектом C++, в котором разделение кода было выполнено плохо, и не хотел еще раз наступать на те же грабли. Поэтому я принял конвенцию, в соответствии с которой файлам .frm (файлам формы) дозволялось только извлекать данные из БД и сохранять их обратно, но не передавать эти данные другим частям программы.

Принятая мной конвенция была очень проста, но по мере развития проекта я обнаружил, что она помогла мне избежать многих случаев, в которых мне пришлось бы писать неестественный код. Так, мне пришлось бы загружать формы, но держать их скрытыми, чтобы можно было вызвать реализованные в них методы проверки корректности данных, или мне пришлось бы копировать код форм в другие места программы и сопровождать этот параллельный код.

(c) С.Макконел, "Совершенный код"
31 exwill
 
08.12.18
09:49
(28) В голове код писать нельзя. Там места мало.
32 vde69
 
08.12.18
11:18
в УФ

1. модуль объекта не доступен из клиентских вызовов формы
2. для вызова кода из модуля объекта надо сначала сериализовать реквизит формы в объект, при чем при каждом серверном вызове....

самое лучшее код для формы писать
форма+общий модуль
33 Конструктор1С
 
08.12.18
12:34
(32) "для вызова кода из модуля объекта надо сначала сериализовать реквизит формы в объект, при чем при каждом серверном вызове...."

Разве в этом есть какие-то сложности или трудности?
34 Конструктор1С
 
08.12.18
12:38
Полновесный объект (СправочникОбъект, ДокументОбъект и др.) и так существует на сервере на момент вызова. На клиенте, из модуля формы мы лишь работаем с его "облегченной" версией, в которой нет модулей и содержится лишь часть данных.
35 ssh2006
 
08.12.18
13:25
(34) > и так существует на сервере на момент вызова.

нет
36 GANR
 
08.12.18
14:20
(4) +1 в большинстве случаев. Так как при этом подходе для вызова алгоритма не потребуется дополнительных строк кода для получения объекта или формы. Вот в форме код который вызывается извне пишут только мудаки - ненавижу такой стиль.
37 vde69
 
08.12.18
15:07
(33) если объект маленький - не сложно, если в нем 5 ТЧ по 1000 строк (например такие документы в ЗУП очень часто встречаются) - то уже будет совершенная лишняя нагрузка

(34) это не так, полноценный объект существует только внутри НЕКОТОРЫХ предопределенных событий (например "ПриЗаписиНаСервере")


кроме того УФ в прицепе не позволяет сохранять на сервере любые переменные и объекты... Что-бы сохранить любой Объект между двумя клиентскими вызовами нужно весьма и весьма извратится
38 Конструктор1С
 
08.12.18
15:14
(35) да, действительно, проверил. Объект существует при считывании из ИБ, записи в ИБ, и при вызове.
39 Конструктор1С
 
08.12.18
15:34
(37) в том же ЗУПе все бизнес-методы расположены в модуле объекта/менеджера. Т.е. можно сделать примерно так:

ДокументНачисления = Документы.НачислениеЗарплаты.СоздатьДокумент();
ДокументНачисления.ЗаполнитьСотрудниками();
ДокументНачисления.РассчитатьНачисления();
ДокументНачисления.Записать();

а в модуле формы лишь интерфейсная логика, и это правильно.
40 vde69
 
09.12.18
00:12
(39) ппц.... слов нет...

мы говорим об форме документа, а не обработке...
42 Конструктор1С
 
09.12.18
05:05
(40) разработчики типовых стараются придерживаться принципа, описанного в (30)
и совершенно не важно, форма документа, справочника или обработки. Я бы даже сказал, для документа это ещё более актуально, чем для обработки. Обработку не так часто приходится выполнять программно. А вот программно заполнять/корректировать документы приходится довольно часто.
Но и с обработкой не всё просто. Когда уровень автоматизации на предприятии возрастает, появляется желание запускать ту или иную обработку через регламентное задание. Если основная логика обработки будет расположена в форме обработки, то будет упс. Придётся этот код вытаскивать в форму объекта/менеджера, либо куда-нибудь копировать, что ещё хуже. И хорошо если код легко перетащить из формы в модуль объекта. Может получиться так, что код тесно завязан на реквизиты формы. Тогда придётся дополнительно покувыркаться, чтобы заставить всё это работать.
Лично я придерживаюсь принципа, что у любого объекта должен быть программный интерфейс, позволяющий выполнить основную его логику из кода. Ни разу не сталкивался, чтобы такой подход чем-то был неудобен. И наоборот, бизнес-логика, огульно засунутая в форму объекта, периодически вставляет палки в колёса и создаёт лишнюю работу.
43 Конструктор1С
 
09.12.18
05:34
"Вкалывают роботы, а не человек" (с)

Мы все занимаемся автоматизацией. Рано или поздно автоматизация доходит до такого уровня, когда операции перестают требовать пользовательского вмешательства, и начинают выполняться полностью автоматически. В рамках 1С функцию робота могут выполнять регламентные задания. Так вот, роботу требуется программный интерфейс, через который он будет выполнять те или иные действия. Если весь код расположен в форме, то подразумевается обязательное вмешательство пользователя. Форма должна быть открыта, и только после этого всё остальное. Это низкий уровень автоматизации. При высоком уровне автоматизации должна быть возможность выполнить некие действия исключительно программно. Форма в этом случае выпадает, как слабое звено. Поэтому стоит задуматься о размещении кода в модуле формы.
44 vde69
 
09.12.18
12:28
(43) >>>Форма должна быть открыта, и только после этого всё остальное

я Вас огорчу...

вполне рабочий код:

мФорма = ПолучитьФорму()
мФорма.МояОписанаяКакЭкспортнаяПроцедура()
45 Конструктор1С
 
09.12.18
12:51
(44) что так можно я знаю, но такой подход ну совсем не по фэншую. К тому же ПолучитьФорму() доступно только на клиенте. Как-минимум придётся дополнительно городить, чтобы форма с клиента приехала на сервер. Ведь основная бизнес-логика всегда выполняется на сервере.
46 exwill
 
10.12.18
09:19
Модно и молодежно писать код сюда:
http://catalog.mista.ru/public/707283/
47 Лефмихалыч
 
10.12.18
09:25
(0) лучше начинать переставать писать код для неуправляемого режима. Превратишься в клюшкодава со временем, а вместо пальцев будут писюны

(44) за такой код скоро будут заплёвывать, как за клюшки
48 runoff_runoff
 
10.12.18
09:36
(47) не только за клюшки, но и за "обычные" формы..
AdBlock убивает бесплатный контент. 1Сергей