Имя: Пароль:
LIFE
 
OFF: Зачем ООП в 1С?
, , ,
0 Omskdizel
 
02.08.12
07:55
Бродя по разным веточкам нашего славного форума, регулярно натыкаюсь на фразы о том, что надо бы ООП прикрутить к 1С. Долго думал, воскуривал фимиам и так и не допер, зачем он надо? Не так давно на Хабре проскочила очень занятная статья на эту тему (http://habrahabr.ru/post/147927/).
С автором статьи я по большей части солидарен, особенно если прикладывать к 1С, посему вопрос: Ребята, которые хотят ООП в 1С, можете примерно рассказать, для каких задач он надо вам?
136 izekia
 
02.08.12
10:26
но подчеркну, в целом эти байты не нагрузят память при правильной реализации
137 izekia
 
02.08.12
10:26
(135) а вот теперь подробнее
138 Omskdizel
 
02.08.12
10:28
(136) Вот как раз об этом писал, когда меня гуру перебил. Всегда правильно реализовывать не получится. Будет много неоптимальностей. Как их есть и с нынешней парадигмой программирования.
139 Flyd-s
 
02.08.12
10:29
(98), пиши функцию печати в модуль менеджера. И не нужно будет иначеЕсли дописывать
140 Omskdizel
 
02.08.12
10:29
Со (130) в целом конечно согласен, но частности (в виде неоптимального кода) могут похоронить идею.
141 vde69
 
02.08.12
10:32
(137) а чего подробнее? для обьекта выделяется память под статические свойства и под описание самого объекта, где тут выделение памяти под данные?

Память под конкретные данные выделяется по мере необходимости (при чем там есть несколько разных механизмов, начиная от кучи и заканчивая например файлами опубликованами в памяти, или даже глобальной памятью)

Реализация 1с оперирирует только "кучей", любые другие способы требуют явной типизацией и не могут работать со сборщиком мусора (требубт явного удаления из памяти)
142 Omskdizel
 
02.08.12
10:32
У меня где-то на задворках размышлялки витает мысль, что далеко не всегда будет оптимальным наследовать класс (с возможно лишними данными) и часто придется писать новый базовый класс.
143 izekia
 
02.08.12
10:32
(140) ну это уже о том, что ООП дает кучу возможностей, и человека это окрыляет, а потом когда начинаются затыки, он либо начинает копать глубже и осознавать свои ошибки, либо начинает плеваться и говорить: "Этот ваш ООП"

это вопросы не к парадигме, а к уровню подготовки специалиста
144 izekia
 
02.08.12
10:33
(141) чопростите? объекту выделяется под статику? илите может доку покурите?
145 Omskdizel
 
02.08.12
10:34
:))))
Ребят, это ТАМ все делается так, как пишите, как сделает (если возьмется) 1С одному Нуралиеву известно :)
146 vde69
 
02.08.12
10:34
(144) мы говорим об экземпляре объекта
147 izekia
 
02.08.12
10:35
(142) конкретный пример?)
в целом если проектирование неудачное такое может быть, но рефакторинг на то и существует)
148 Господин ПЖ
 
02.08.12
10:35
тупая ветка
149 Omskdizel
 
02.08.12
10:35
(143) Ну вот отсюда то и вывод, может и станет лучше, но далеко не всем. Может конечно то на то и выйдет, 1Сникам будут больше платить денег :) Ибо станет их меньше :)
150 vde69
 
02.08.12
10:36
(143)+100 порог вхождения в ООП на порядок выше чем в 1с
151 izekia
 
02.08.12
10:36
(146) в (141) речь о статических свойствах, я правильно понял?
152 Ненавижу 1С
 
гуру
02.08.12
10:38
пустые ссылки на записи в таблицы должны быть NULL
ссылки на неиницилизированные объекты в памяти должны быть Неопределено
153 vde69
 
02.08.12
10:38
(151) о статических данных (просто "свойство" - более привычно для ООП в плане доступа к данным)
154 izekia
 
02.08.12
10:38
(149) ну я приверженец идеального кода и стараюсь писать в соответствии с определенными принципами, соответственно с ООП многие вещи для меня стали бы проще, что касается рынка труда - я думаю хуже точно не станет, а если повысится порог, то все же будет выше средний уровень ... проще будет увидеть неспеца, хотя их и так видно
155 izekia
 
02.08.12
10:40
(152) ура!
(153) я просто понял что речь идет о классических статических свойствах класса, у объекта статических свойств нет
156 Sserj
 
02.08.12
10:43
(141) Ну может у разных языков разная реализация, но допустим в яве сразу при создании объекта все инициируется значениями по умолчанию и память резервируется полностью под весь объект.
157 Sserj
 
02.08.12
10:46
+(156) Да и мне кажется что если выделять под объект память по мере необходимости, память станет слишком дефрагментированной и минусы будут намного больше плюсов.
158 rool
 
02.08.12
10:48
(100) Не совсем понятна связь между ООП и памятью? ООП используется на этапе разработки, после компиляции остается оптимизированный машинный код в котором нет не объектов не интерфейсов не других заморочек парадигмы. Разве не так?
159 vde69
 
02.08.12
10:48
(156) реализация классов одинаковая, раньше было два механизма вызова (условно си и паскаль), но сейчас во всех языках есть поддержка обоих моделей библиотек класов и любой obj сейчас можно линковать в любой нормальный язык
160 Omskdizel
 
02.08.12
10:49
(158) Читай ниже, там есть рассуждения на эту тему
161 Buster007
 
02.08.12
10:51
пока нет ООП в 1С многие недовольны ) Как появится ООП в 1С, ИМХО останется тоже много недовольных )
162 vde69
 
02.08.12
10:51
(158) не так, скомпилированый модуль (если не включать библиотеки в тело) получит новый функционал при замене базового класса.
163 vde69
 
02.08.12
10:53
(161) если в 1с появится ООП недовольных будет на порядок больше, по сколько неминуемо произойдет разделение на "системщиков" и "прикладников"
164 Vovan1975
 
02.08.12
11:03
(163) да оно и сейчас есть, за системщиков выступают 1С, за прикладников - все остальные
165 ptiz
 
02.08.12
11:04
Если появится возможность наследования одних объектов от других - это будет полный трындец. У 1С с совместимостью релизов дела обстоят - хуже не придумаешь.

Уже сейчас хватает проблем, когда 1С вдруг решает перенести процедуры из одного общего модуля в другой.

И после этого вы хотите наследование?
166 izekia
 
02.08.12
11:04
давайте лучше это обсудим: v8: OFF: Даешь ФП в 1С!!!
167 Vovan1975
 
02.08.12
11:06
(150) не льстите себе, подойдите поближе...

Есть такое мнение что ООП и разработана для быдлокодеров...
168 vde69
 
02.08.12
11:10
(167) в свое время разработал две полноценных компоненты для дельфи 2.0, пользовалось куча народу (уж не помню как точно назывались, что-то тип rGrid), точно могу сказать, что ООП на порядок сложнее в понимании процедурных языков...
169 Кирпич2
 
02.08.12
11:15
(167) vde69 только к сорока годам переступил порог вхождения в ООП. Теперь ему осталось понять как ООП работает внутри, чтобы не писать ересь про выделение памяти в файлах проецируемых в память и про скомпилированый модуль, который получит новый функционал при замене базового класса.
170 rool
 
02.08.12
11:15
(167) сильное, и не обоснованное заявление... за изучение ООП в основном принимаются те кто уже полностью "въехал" в функциональное программирование. И воткнуть в него поначалу очень не просто. А если еще учесть паттерны - быдлокодер их просто не поймет
171 izekia
 
02.08.12
11:18
"за изучение ООП в основном принимаются те кто уже полностью "въехал" в функциональное программирование"
глупости сходите по ссылке в (166) и сравните о чем здесь и там)
172 rool
 
02.08.12
11:26
(171) Я имел ввиду нормальное изучение, а не хватание верхов без понимания как это работает и нафига оно надо, с последующими воплями что парадигма г..но
173 izekia
 
02.08.12
11:29
(172) изучение - это изучение, а вот результаты могут различаться
174 vde69
 
02.08.12
11:30
(172) есть следующие осноные виды программирования

1. Процедурное (например С, Паскаль)
2. Функциональное (например Лисп)
3. ООП (Например С++)
наверно есть и другие но живьем не сталкивался

с функциональным программированием вообще очень мало кто сталкивался... наверно ты имел в виду Процедурное?
175 Ненавижу 1С
 
гуру
02.08.12
11:31
(174) в шарпе функциональные вставки сделали
176 rool
 
02.08.12
11:32
(172) Ага, попутал термены. В паскале кстати ООП довольно полноценно реализовано
177 izekia
 
02.08.12
11:33
(175) шарп отлично развивается
178 rool
 
02.08.12
11:36
(176) угу, особенно linq впечятлил.
179 vde69
 
02.08.12
11:36
(175) в каком паскале? в 5.0 его не было вообще (вроде он появился в 5.5 или даже 6.0), реально ООП появился в дельфи...
180 rool
 
02.08.12
11:39
(179) не помню версию турбо паскаля с которой мы начинали в инсте, но в ней конструкция object присутствовала и довольно не плохо работала :)
181 Кирпич2
 
02.08.12
11:45
(179) ООП - это Объектно Ориентированный Программист?
182 forforumandspam
 
02.08.12
11:55
Интересен комментарий:
"

К ООП тоже отношусь спокойно, отрицательно.

Так вот, написание кода - это мелочи. Это 5-10% времени и стоимости разработки. Сотни миллиарды долларов и миллионы человеко-лет (без преувеличения), как в трубу, вылетают на поддержание (тестирование, правку багов) софта. Вот это и есть настоящая проблема. Да еще программисты наповадились с места на место бегать каждые 2-4 года, -- только человек освоится и годик поработает продуктивно, -- глядишь, он уже опять куда-то намыливается... И вот тут возникает интересная проблема. В связи с высокой текучестью кадров и большой сложностью реальных проектов читаемость и модифицируемость кода приобретает первостепенное значение!

Чтобы код был читаем и легко модифицируем, крайне желательно, чтобы он был локально понятен. Так, чтобы новый человек, посмотрев на процедуру, смог достаточно быстро понять, что она делает и как. И вот тут, в объектно-ориентированных языках типа Java, С# начинается веселье с конструкторами, деструкторами, виртуальными функциями, наследованием, монстроидальным шаблонным метапрограммированием, полиморфизмом, исключительными ситуациями... Увидев вызов простой функции, как правило сразу понятно что происходит, можно сходить и посмотреть, что она делает. В объектно ориентированных языках, где народ (в особенности вчерашние студенты) любят, ой как любят переоперделять функции, не поймешь, какой из 15 виртуальных методов будет вызван в данном контексте, и читать текст их всех дело утомительное. В результате починка бага занимает в 3-5 раз больше времени.

Перейдем к деструкторам и конструкторам. Видит программист описание локальной переменной, которая нигде не используется, и, не сомневаясь, удаляет его. Программа перестает работать. Что случилось? Оказывается, конструктор этой переменной устанавливает связь с другим объектом. Конечно, за такие фокусы (я имею в виду создание такого конструктора) нужно увольнять, но что написано пером - не вырубишь топором. В результате программист (по-хорошему) вынужден прочитать описания всех конструкторов и деструкторов по всей цепочке наследования всех локальных cтруктурных переменных процедуры. Кому хочется шариться по 40 файлам, чтобы понять, что делается в процедуре? — да никому. Никто этого и не делает, в результате через 3 года в программе, лихо написанной на объектно ориентированном языке, не разберется никто. Посему, и надежность программ, размашисто написанных на таких языках, оставляет желать лучшего. Я уже не говорю про перекрытие операторов, конструкторов копирования и прочее. Творческое пользование темплейтами также сможет доставить потомкам немало приятных минут. А чего стоят исключительные события? Почему-то получается, что код, написанный на языке программирования без скрытого поведения, поддерживать и сопровождать гораздо легче. Просто уже потому, что вероятность наступить на грабли меньше. Описана переменная -- можно быть уверенным, что ничего больше это не означает. Вышли из блока -- значит, вышли, и нечего кроме. Что написано, то и происходит. Когда же приходится докапываться до третьего слоя истины -- это бардак. К сожалению, на объектно ориентированных языках наломать дров проще простого, что мы и наблюдаем изо дня в день.

Как это ни удивительно, при промышленном программировании залогом хорошего здоровья является простота. Чем проще, тем лучше. Код должен быть понятен, иначе человек, который заменит Вас через 2-4 года, не справится. Хотите проинициализировать переменную? Вызовите процедуру. Надо вызвать функцию? Вызовите ее напрямую. Очевидно, что чем проще язык программирования, тем трудней сделать на нем семантическую ошибку. Если достаточно полное и предельно краткое описание языка занимает около 1000 страниц, можно ли ожидать, что рядовой программист будет знаком хотя бы с 50% особенностей языка? -- навряд ли. Тогда откуда может быть уверенность, что достаточно навороченная конструкция представляет собой именно то, что хотел сказать программист?

Далее. Стандартные библиотеки. Опять же, с точки зрения промышленного программирования, — чем проще, тем лучше. Если в стандартной библиотеке (к тому же динамически подгружаемоей) есть баг, то это беда. Если программисты его не нашли -- значит, найдут пользователи. Если нашли и обошли, то проблемы начнутся после того, как пользователь обновит библиотеки и в новой версии баг будет починен. Наконец, необходимым требованием является 100% обратная совместимость библиотек. Ну скажите мне, хоть одна библиотека для Java удовлетворяет этому требованию? А есть ли там хоть одна процедура без какого-либо ляпа? Я уже не говорю о вопросах совместимости, инсталляции и прожорливости разных версий фреймворков под C# .NET и о том, что на изучение постоянно изменяющихся спецификаций различных новомодных библиотек может уйти полжизни, не говоря уже о проблемах стабильности их работы на практике.

Смежная проблема. Возраст языка. Чем старше язык, тем лучше и глубже его знают программисты. Всем известно, что можно делать, чего нельзя, а что можно, но лучше не нужно. С новомодными языками дело обстоит сложней, и опыт, равно как устав караульной службы, пишется кровью программистов. Наконец, не следует забывать, что разработчики компиляторов тоже не боги и могут ошибаться, а чтобы найти баги в компиляторе с Java или, в особенности Сановском, напрягаться не нужно - баги Вас сами найдут.

Вообще, за последние 20 лет вышла масса литературы на тему дизайна программного обеспечения. Авторы книг статей постарались на славу. Были выделены и формализованы основные конструкции в виде паттернов проектирования. Сформированы основные практики и рекомендации. Однако, у этой большой и красивой медали есть обратная сторона – очень редко говорится О РЕАЛЬНОЙ НЕОБХОДИМОСТИ ПРИМЕНЕНИЯ тех или иных методик, а также о трудозатратах при этом. Подавлющая масса молодых программистов из-за отсутсвия опыта воспринимает все подобные материалы совершенно неадекватно, стремясь де-факто реализовать в одном месте практически все то, о чем они когда-либо читали и слышали (а слышали они в силу возраста как раз все последние веяния). Им трудно дифференцировать рациональные зерна от бесполезных "бантиков" и программирование превращается не столько в создание требуемого функционала, сколько в продумывание деталей как это будет написано. Внешнее и второстепенное выдвигается на первое место. Значительную часть времени начинает занимать бесполезный рефакторинг программного текста и мысли о том как же организовать очередное хитрое зацепление классов, в то время как создание полезнго функционала уходит на задний план. Например, в игровой индустрии подобные повадки особенно вредны. Нужен функционал, не нужен лишний текст. 99% текста выполняют 100% работы.

Например, когда-то одному разработчику был дан проект очень незатейливой игры. Предполагалось, что эта игра займет около месяца разработки. Но месяца не хватило. Спустя шесть недель выяснилась причина. Программист попался очень педантичный и вместо того чтобы взять чистый СИ и написать игру, он 80% времени занимался тусовкой классов в сложнейшей иерархии. Когда посчитали – оказалось порядка 210 классов. Движок получился, была написана чудовищная гора текста. В объекты было завернуто все, начиная от объектов межпоточной синхронизации и кончая экранными виджетами со своей собственной системой сообщений. Да только вот беда — сама игра была в совершенно зачаточном состоянии и не работала. Старые игры для GBA, C64, NES, SNES, Megadrive, ZX Spectrum, Atari, N64 всегда, с неизменным постоянством работали как часики. Можно конечно сейчас сказать "ну знаешь ли, не сравнивай сложность продуктов". А ничего подобного! Просто нужно знать как писались эти вещи и на чем писались. Раньше ведь даже не было IDE, и дебаггеров с одним тычком мыши. Не было самих мышей. Загружались с дискет (а еще раньше с кассет!). Иногда не было возможности отлаживаться или даже запускать код на самом устройстве. Так может уделять внимание эффективности, задачам которые пытаемся сделать?

Информация к размышлению: http://www.softpanorama.org/SE/anti_oo.shtml"
183 Sserj
 
02.08.12
12:40
(182) Какой то взрыв мозга неудачника.
Бери простой язык Басик, напиши и попробуй сопроводи на нем чтонибуть больше 1000 строк кода.
А благодаря ООП развиваются проекты с миллионами строк, понятно что разобраться в них это не в 100 басиковских, но зато реально.
184 Маленький Вопросик
 
02.08.12
12:47
я пишу на пхп исключительно классами - тупо кода меньше.. и он мне понятнее
185 rool
 
02.08.12
13:01
(182) Насчет шариться по куче файлов: а разве в 1С без ООП сейчас этого делать не надо? Разбор одной обработки проведения документа заставляет залезть в десятки общих модулей, и разобрать функции с дикими параметрами (вроде структур формирование которых размазано по километру кода). Офигительное упрощение читабельности...
186 gae
 
02.08.12
13:11
(185)
>>разобрать функции с дикими параметрами
Что же поделать, если все эти параметры нужны. Не 2+2 ведь складываем.

Да, многие процедуры вынесены в общие модули и, частенько, мудрено устроены и мудрено взаимосвязаны. Сторонним программистам кажется, что это все необоснованно мудрено, но они то всего лишь пытаются проанализировать как работает какой-нибудь частный случай, какой-нибудь отдельный документ. А вся мудреность была создана, чтобы работал "общий случай", чтобы были единые, более менее универсальные механизмы для множества документов, чтобы была везде была примерно одинаковая метода построения кода. Это значительно упрощает развитие и поддержку конфигурации, если, конечно, изучить её внутреннее устройство на нормальном уровне.
187 rool
 
02.08.12
13:21
(186) Да но параметр в виде объекта целиком описанного в одном месте несколько понятнее чем например такая фиговина:

Параметры = Новый Структура;
Параметры.Вставить("Хрень", ...);

//десяток строк кода

Хрень2 = Новый ТаблицаЗначений;
// добавлены колонки
// десяток строк кода, запрос..
//заполнение таблицы значений

Параметры.Вставить("Хрень2", Хрень2);

//Еще десяток строк

Хрень3 = и т.д.

Плюс для параметра - объкта в языке еще и интеллисенс в нормальных средах разработки работает, чего не скажеш о подобной структурке...
188 vde69
 
02.08.12
13:25
(186) реализация в ООП будет примерно такая

Расчетчик = Новый ПодсистемаВалют.РасчетКурсов;

Расчетчик.ВалютаИсточник = ВалютаДокумента;
Расчетчик.ВалютаПолучатель = ВалютаРегламентированоУчета;
Расчетчик.ДатаКонвертации = ДатаДокумента;

Для каждого эл из Документ.Товары Цикл
НоваяСуммаПоСтроке = Расчетчик.Конвертировать(эл.Сумма);
189 gae
 
02.08.12
13:26
+(186) меня, например, убивает вот такая читабельность кода:

СтрокаТабличнойЧасти.ЕдиницаИзмерения     = СтрокаТабличнойЧасти.Номенклатура.ЕдиницаХраненияОстатков;    
СтрокаТабличнойЧасти.Коэффициент = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;

Да, читабельно и понятно, и вот это читабельное и понятное по всей конфигурации разбросано, в каждом месте, блджад, читабельно и понятно...  И теперь если надо изменить логику получения единицы измерения по умолчанию, надо перелопачивать все эти места.
Нет чтоб сделать в общем модуле единую функцию для получения единицы измерения по умолчанию и её коэффициента.
190 vde69
 
02.08.12
13:27
(188) а можно будет сделать новый класс

ПодсистемаВалют.РасчетКурсов.ВРегВалюту
191 gae
 
02.08.12
13:31
(187) ну так все равно все сложное содержимое объекта так или иначе будет где-то инициализироваться, все будет заполняться, каждое поле.

Так и тут, структуру заполнили и гоняем её потом.
192 NS
 
02.08.12
13:32
(183) И чем-же в объектах разбираться проще чем в процедурах и функциях?
193 gae
 
02.08.12
13:35
(190) а какие принципиальные преимущества перед просто универсальной процедурой для пересчета, как сейчас в 1С?

Для меня главное чтобы каждый "элемент прикладной логики" был зашит в одном месте, объект это или процедура - это уже не важно.
194 vde69
 
02.08.12
13:37
(192) например тем что присвоение ппараметров делается через свойства, и первичную проверку типов, корректности с другими параметрами можно сделать внутри объекта и не парить людям мозг :)

ну и еще кучу чего можно просто скрыть...
195 Ненавижу 1С
 
гуру
02.08.12
13:37
(193) его можно подменить на другой и использовать также  - паттерн стратегия
хотя конечно в данном случае вряд ли это востребовано
196 rool
 
02.08.12
13:37
(191) я все таки про читаемость кода сторонним разработчиком... Возьмем функцию которая в качестве параметра принимает фиговину типа (187), а то и несколько таких фиговин, так вот чтобы понять как работает данная функция надо скурить весь процесс формирования этих диких структур в функции вызывающий и понять как собственно эта структура устроена, или смотреть в отладчике, что не всегда возможно на боевых серверах с выключенным дебаг-модом... а вот при наличии объктов и собственно параметра в виде объекта, достаточно скурить описание его полей описанных в одном месте
197 izekia
 
02.08.12
13:40
(192) смотря кто писал, тут уже вопрос к именованию ...
но в целом для меня проще увидев объект и его методы понять что же он делает, чем методы которые отделены от данных и фактически мне нужно больше времени на ту же процедуру
198 vde69
 
02.08.12
13:40
(192) почему, например на основании этого делаем классы

РасчетчикРублевый, РасчетчикУправленческий

оно будет сильно читабельнее :)
199 izekia
 
02.08.12
13:41
(196) мы прямо синхронно выступили))
200 Нуф-Нуф
 
02.08.12
13:41
200
201 gae
 
02.08.12
13:41
(196)
>>надо скурить весь процесс формирования этих диких структур в функции
также придется скурить и формирование этих диких структур в объекте
202 rool
 
02.08.12
13:43
(201) Повторюсь я вижу все описание объекта в одном месте. Структура же зачастую формируется километром кода и всю её я сразу увидеть не могу
203 gae
 
02.08.12
13:44
(198) ну так то да, главное не переборщить :)

Но! в 1С то точно также делаем, две процедуры для пересчета в Регл и Упр валюты, которые внутри себя вызывают уже центральную процедуру пересчета, и всё.
204 gae
 
02.08.12
13:45
(202) ну случаи растягивания на километры кода боюсь не от этого зависят, а от
1. реальной сложности алгоритма
205 gae
 
02.08.12
13:45
+(204) 2. криворукости
206 vde69
 
02.08.12
13:48
(203) разница в том, что если я в ООП в обьект Расчетчик добавлю свойство "Кратность" оно сразу появится и в унаследованых обьектах РасчетчикРублевый, РасчетчикУправленческий и его можно будет использовать СРАЗУ...
207 rool
 
02.08.12
13:49
(204) и опять речь не об этом. я вижу функцию с параметром, я хочу знать что этот параметр должен содержать, в случае параметра объекта я просто смотрю список его полей не заходя в отладку и не читая простыни кода... в случае с 1с если функция не откоментированна я хз что этот параметр должен получить, я даже типа данных его не вижу
208 vde69
 
02.08.12
13:50
(206) или например свойство "бивалютная" и будет расчитыватся бивалютный курс :)
209 gae
 
02.08.12
13:56
(207) а, ну в смысле, что в средах разработки отображается состав объекта в отдельном окошке? да, удобно
210 gae
 
02.08.12
13:58
(208) ну да, ООП тут рулит.
211 gae
 
02.08.12
14:03
Я применяю в 1С такие псевдообъекты:
Делаем общий модуль, в нем конструктор структуры, которая содержит данные объекта. Далее в модуле уже идут процедуры-методы, первым параметром у которых идет структура.

Инициализируем экземпляр структуры-объекта, и потом вызываем процедуры, засылая в них в них этот экземпляр.
212 notton
 
02.08.12
14:09
(0) очень интересное мнение с описанием деталей всей этой кухни
213 izekia
 
02.08.12
14:18
(212) лажовым описанием ...
214 iceman2112
 
02.08.12
14:21
Дорогой, я не умею готовить твоё любимое блюда, вообще зачем оно тебе надо объясни? Может я не буду учиться его готовить, а ты поешь яичницу.
215 rool
 
02.08.12
14:31
и ваще надо писать на ассемблере.. все остальное происки жиреющих империалистов :)
216 Mafoni
 
02.08.12
14:56
(122) - за такой запрос руки бы поодбивал.
217 Mafoni
 
02.08.12
15:20
(189) - Посмотри конфу от раруса - там есть в каждом модуле объекта документа - процедура - ОбработкаРеквизита + она же есть в общем модуле - идея следующая если происходит изменение реквизита то лезем в ОбработкуРеквизита с нужными параметрами - если реквизит спецефический то в этой процедуре выполняем нужные действия - если реквизит какой нить общий (пример - Номенклатура) - лезем в общий модуль в одноименную процедуру ОбработкаРеквизита и там чего то меняем уже - итог - изменение логики = изменение одной строчки.
218 izekia
 
02.08.12
15:46
(217) плачу от умиления, какой шикарный костыль
219 IamAlexy
 
02.08.12
15:47
(217) шикарно...

потом приходит человек незнакомый с этой логикой и начинает править непосредственно в том месте где поменялась логика..

потом приходит третий человек который знает про этот костыль...
220 Mafoni
 
02.08.12
15:49
(218) - согласен что это не идеальное решение, но что есть то есть.
(219) - самому сначало было не привычно - потом ниче - даже удобно стало, а про людей не знающих - да могут дров наломать.
221 IamAlexy
 
02.08.12
15:49
+(219) а еще лучше так - приходит  второй  и делает подписку на событие
приходит третий - выносит в общий модуль изменение логики
приходит четвертый - правит прямо на месте
приходит пятый и ох.евает...
222 Mafoni
 
02.08.12
15:51
(221) - имхо было 5 человек - после того как вкурили что к чему - изменения делали единообразные согласно структуре.
223 Mafoni
 
02.08.12
15:52
(221) - с вашей точки зрения как было бы верно реализовать сию фигню ?
224 IamAlexy
 
02.08.12
15:54
(223) если честно то я вобще не понял накой хрен это нужно...

типа был реквизит "Номенклатура" а его поменяли на "контрагенты" или что?
225 Mafoni
 
02.08.12
16:04
(221) - и если не затруднит то ответьте пожалуйста на такой вопрос - как с помощью подписки на событие отловить изменение реквизита в открытой форме ?
226 Mafoni
 
02.08.12
16:18
(224) - Ниже пример - единицу измерения заполнять нужно всегда не зависимо от документа - а цену к примеру только в определенном документе.

Форма документа

Процедура ТоварыНоменклатураПриИзменении(Элемент)
   ОбработкаРеквизита("Товары.Номенклатура",ЭлементыФормы.Товары.ТекущаяСтрока,ЭтаФорма);    
КонецПроцедуры

Модуль объекта документа

Функция ОбработкаРеквизита(Имя,ТекСтрока=Неопределено,ЭтаФорма=Неопределено,ДопПараметры=Неопределено) Экспорт
Если ИмяРеквизита = ......
ИначеЕсли Имя="Товары.Номенклатура" Тогда
  Рез = дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока,ЭтаФорма,ДопПараметры); /// Вызов процедуры из ОбщегоМодуля
  Рез = ОбработкаРеквизита("Товары.Цена",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
  Рез = ОбработкаРеквизита("УстановитьРозничнуюЦену",ТекСтрока,ЭтаФорма,ДопПараметры) И Рез;
  Возврат Рез;
КонецЕсли;
КонецФункции

Общий модуль

Функция дкОбработкаРеквизита(ЭтотОбъект,Имя,ТекСтрока=Неопределено,ЭтаФорма=Неопределено,ДопПараметры=Неопределено) Экспорт
Если ИмяРеквизита = ......
ИначеЕсли Имя="Товары.Номенклатура" Тогда
/// Тут у примеру заполняем единицу измерения
Возврат Рез;
КонецЕсли;
КонецФункции
227 ptiz
 
02.08.12
16:26
(226) Не дай бог такое сопровождать.
228 IamAlexy
 
02.08.12
16:28
(226) полный п.здец...

и эти люди требуют ООП в 1С?

выжигать их каленым железом...
229 Mafoni
 
02.08.12
16:29
(227) - 5 лет :) сопровождал сие чудо - кстати это Управление торговлей от Раруса
230 Mafoni
 
02.08.12
16:29
(229) - конфа мож как то и по другому называется сейчас уже не упомню.
231 Mafoni
 
02.08.12
16:30
(228) - Алексей вы не ответили на вопрос в (225)
232 izekia
 
02.08.12
16:47
(228) дада, лучше ФП
233 Mafoni
 
02.08.12
17:02
(232) - ИМХО - каждому свое.
234 IamAlexy
 
02.08.12
17:04
(231) при записи объекта посмотреть что изменилось например.. но в контексте пересчета ТЧ который вы показали это конечно же неприменимо...
235 Mafoni
 
02.08.12
17:22
(234) - спасибо.
Закон Брукера: Даже маленькая практика стоит большой теории.