|   |   | 
| 
 | где лучше писать код? в модуле формы или в модуле объекта? | ☑ | ||
|---|---|---|---|---|
| 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) не только за клюшки, но и за "обычные" формы..     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |