gifts2017

Модуль менеджера или статические методы класса?

Опубликовал Александр Лапшин (zfilin) в раздел Программирование - Теория программирования

Зачем в платформе 8.2 добавили модуль менеджера объекта, как его использовать? Попробуем разобраться.

Собственно, суть статьи уже отражена в ее названии и те, кто все сразу понял, могут дальше не читать. Все нижеизложенное писалось для таких же, как я, новичков в программировании, для тех, кто при виде новой сущности "Модуль менеджера" подумал: "Что за черт! Мало что ли общих модулей?"

Итак, для начала немного "пожуем" ООП.

Вызовы методов классаВ ООП существует такое понятие, как "статический метод класса". Если говорить кратко, это такой метод, который не использует свойства класса и может быть вызван без создания экземпляра класса. Если вдаваться в подробности (не глубоко), то существование таких методов обосновано способом организации хранения объектов в памяти. Тогда как свойства занимают место в памяти для каждого создаваемого объекта (иначе чем бы они различались?), его методы хранятся только в разделе описания самого класса и не дублируются для каждого экземпляра. Таким образом, вызывая метод конкретного объекта мы обращаемся к коду описанному в блоке описания класса передавая ему некий "контекст" свойств конкретного объекта. Но если метод не использует никаких данных из передаваемого "контекста" и сам "контекст" ему по сути не нужен, то почему бы не вызывать его напрямую? Такие методы, не нуждающиеся в "контексте" и назвали "статическими".

Конечно, технически все это наверное не относится к 1С, но статические методы это не только особый способ обращения к методам, но и часть парадигмы ООП, определяющая сам стиль программирования.

Как мы можем использовать все это на практике? Рассмотрим пример.

Пусть у нас существует документ "Заказ", который может иметь два состояния: Предварительный и Окончательный. Причем, для предварительного и окончательного заказов набор обязательных для заполнения реквизитов разный. Как можно проверять этот момент и не давать записывать документ при не заполненных обязательных реквизитах? Конечно, можно организовать проверку непосредственно в событии "ПередЗаписью", но более универсальным способом было бы сделать функцию ПолучитьСписокОбязательныхРеквизитов(Режим), в которую можно было бы передать режим, и которая возвращала бы список обязательных реквизитов для документа. И вот, главный вопрос: куда поместить эту функцию?

Небольшой исторический экскурс. В 1С 7.7 было только одно место где можно было описывать функции сразу доступные отовсюду - это глобальный модуль (про разные ухищрения говорить не будем). И в больших конфигурациях он, несмотря на все усилия по сохранению в нем порядка, обычно превращается в "помойку функций", в которой очень сложно что-либо найти или даже разобраться в логике работы.

В восьмой версии появилась возможность добавлять общие модули в произвольном количестве и это позволило навести некоторый порядок, но все-равно оставались модули с названием вроде "Разное" или "Дополнительно" в которых обычно мы видим тот же глобальный модуль 7.7, только меньше. Так же бывает так, что количество общих модулей стремится вырасти до количества типов объектов метаданных. Разработчики делают справочник "Товары" и общий модуль "Товары" для функций связанных с товарами. На мой взгляд это не очень хорошо, хоть и удобно.

Но вернемся к нашей функции ПолучитьСписокОбязательныхРеквизитов. Конечно, можно поместить ее в модуль формы, но тогда она не будет доступна из других частей конфигурации (без получения формы), а узнать какой реквизит обязателен для заполнения может понадобиться когда угодно, например в какой-нибудь обработке заполнения. Поэтому лучше было бы поместить ее в модуль объекта. Но нужно помнить, что в 8.2 нельзя просто так обратиться к методам модуля объекта (без записаного объекта или вызова "ДанныеФормыВЗначение"), а проверить реквизиты нужно. К тому же для вызова метода конкретный объект по сути не нужен.

И вот наступил тот самый момент, когда две части этой статьи сходятся в одной точке. Такую функцию можно назвать "статическим методом класса", так как для ее работы не нужен конкретный экземпляр класса (объект, конкретный документ), но она очень тесно логически связана с самим классом, обязательность-то мы проверяем у конкретного вида документа. И ее можно смело помещать в модуль менеджера этого документа. К тому же ее вызов очень изящно оформляется через объект "Документы":

спОбязателньыеРеквизиты = Документы.Заказ.ПолучитьСписокОбязательныхРеквизитов(Объект.ВидЗаказа);

Надеюсь, теперь всем, кто дочитал до этого места понятно зачем же можно (и нужно) использовать модуль менеджера.

Спасибо за внимание и хорошего вам кода.

Черновик статьи в блоге автора.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
StaticMethods.zip
.zip 9,30Kb
04.07.10
109
.zip 9,30Kb 109 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Игорь Исхаков (Ish_2) 02.07.10 17:58
И не знаю , что скажут наши "гуру".
Как начинающий скажу :
Статья хорошо написана. Кратко , точно, изящно.
2. Александр Лапшин (zfilin) 02.07.10 18:28
3. Леонид (leosoft) 02.07.10 19:50
Полезная статья, спасибо! Пишите еще! :)
4. mirco brons (mirco) 02.07.10 21:08
Спасибо, хорошо описан материал.
5. script Мальчинко (script) 03.07.10 00:19
6. rasswet (rasswet) 03.07.10 18:33
для полного завершения не хватает примера, как проверить на заполненность реквизит такой-то.
7. Сергей (Che) Коцюра (CheBurator) 03.07.10 23:17
за "..И в больших конфигурациях он, несмотря на все усилия по сохранению в нем порядка, обычно превращается в "помойку функций", в которой очень сложно что-либо найти или даже разобраться в логике работы."
- атата!
.
лично мне кажется, что разобраться в логике работы или что-нибудь найти - в 8-ке будет посложнее... так что наезды на 7.7-ые подходы - совершенно излишни..
8. Александр Лапшин (zfilin) 03.07.10 23:38
(6) На самом деле в прилагаемом файле проверяются реквизиты, просто я не стал об этом упоминать в статье, чтобы оставить в ней только главное (на мой взгляд).
9. Игорь Исхаков (Ish_2) 03.07.10 23:46
(7) По-человечески понятно.
Что только не придумаешь , чтобы самооправдать непереход на 8.
10. Александр Лапшин (zfilin) 03.07.10 23:52
(7) Все субъективно, на самом деле. Я совсем не против того, что можно очень упорядочено и организовано вести глобальный модуль 7.7, комментировать, может быть писать сопровождающие спецификации и тогда любые восьмерки становятся слишком громоздкими и неудобными по сравнению с простой 7.7
Но мне почему-то чаще встречаются конфигурации "закрученные" настолько, что их просто неудобно читать, реже такие, что и логика начинает теряться в нагромождениях функций. Что очень печально.
11. Сергей (Che) Коцюра (CheBurator) 03.07.10 23:53
(9) не надо гнать волну... ;-) 8-ке - свое место, 7-ке - свое... Переход на 8-ку должен быть обоснован, а если необходимости нет - то на нет и суда нет.. сижу пока что потихоньку 8-ку осваиваю...
12. Александр Лапшин (zfilin) 03.07.10 23:57
13. Сергей (Che) Коцюра (CheBurator) 03.07.10 23:57
14. Александр Лапшин (zfilin) 04.07.10 00:06
(7) (10) Не-не-не, я совсем не против, что в 8-ке тоже можно ТАКОГО сделать, что просто ужас.
15. Гилев Евгений (coach) 04.07.10 08:30
В 8.2 МОЖНО обращаться к экспортным методам объекта, не записывая его. Даже из модуля формы.
См. функцию глобального контекста ДанныеФормыВЗначение().
16. Александр Лапшин (zfilin) 04.07.10 17:01
(15) Спасибо, действительно можно.
А в ваших видеоуроках (во всяком случае в начале, 12-я часть 1-го бонуса) говорится, что нельзя.
Статью поправлю.
wunderland; +1 Ответить 1
17. Гилев Евгений (coach) 04.07.10 18:01
(16) Да, сейчас прослушал видео-урок, действительно его нужно расширить.
Эти видео-уроки писались достаточно давно, и сейчас требуют переработки.
Поставил замечание в туду :)
18. Николай Клементьев (Rusmus) 05.07.10 12:53
совсем замечательно будет, если еще добавят модуль ссылки, функции в котором получали бы в качестве контекста запись таблицы. Сейчас подобное реализуемо, если в функцию в модуле менеджера передавать ссылку через параметры, но как-то это не совсем удобно
19. Трактор Трактор (Трактор) 06.07.10 16:19
(17)
Поставил замечание в туду

Не в туду, а в сюду.
20. Иван Иванович (Асисяй) 08.07.10 08:18
(19)
Не в туду, а в сюду.


В туду значит "в TODO"
21. akama2001 (akama2001) 08.04.11 22:30
спОбязателньыеРеквизиты = Документы.Заказ.ПолучитьСписокОбязательныхРеквизитов(Объект.ВидЗаказа);
вот это жесть написана!!! Объект = Это же заказ!!! т.е. объект уже создан зачем нужно вызывать статический метод класса и передавать туда экземпляр класса то бишь объект...
22. Александр Лапшин (zfilin) 09.04.11 11:55
(21) Да, не совсем удачный пример. На самом деле бывает же, что вид заказа есть, а объекта нет.
23. Илья (i132) 22.09.11 17:20
В таком модуле можно написать погашение заказа несколькими документами, например для заказа: отмена заказа или накладная (или в наборе записей, если регистр один)
24. Алексей Новоселов (a-novoselov) 28.11.11 14:36
Модуль менеджера объекта (только платформа 8.2)

Этот модуль существует для многих объектов конфигурации. Основное предназначение данного модуля – это переопределение стандартного события выбора, которое возникает в момент ввода по строке и расширение функционала менеджера. Модуль компилируется на стороне сервера. В нем возможно определение экспортных свойств и методов. Вызов экспортных методов менеджера не требует создания самого объекта.

http://www.lessons1c.ru/articles/55-moduly82.html

можете по поводу обработки выбора что-то пояснить?
25. Александр Лапшин (zfilin) 29.11.11 21:43
Да, речь идет о предопределенной процедуре "ОбработкаПолученияДанныхВыбора", которая вызывается, когда вы в поле ввода начинаете вводить текст (поле ввода должно быть типа "класса" в котором вы определяете процедуру). С ее помощью можно организовывать собственный "быстрый выбор" (или как оно называется).
Почитайте в синтакс-помощнике, там толково написано.
26. Н Ф (naf2000) 23.12.11 12:15
Нашел единственное отличие методов модуля менеджера от статических:
В методе объекта можно просто по имени вызывать такой статический метод (без упоминания самого класса): Печать(Чтото);
Для метода менеджера все таки надо написать побольше: Документы.ЗаказПокупателя.Печать(Чтото);

И да: даешь модуль ссылки!
yuraos; hansolo686; +2 Ответить
27. Дандронтий Крузенштерн (dandrontiy) 26.04.12 14:38
Почему объектно-ориентированное программирование провалилось?

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

Его статья стала настолько острой и злободневной для своего времени, что вызвала бурный всплеск обсуждений в сообществе программистов, целый ряд известных программистов включились в открытую полемику с автором, от редакции известнейшего американского программистского журнала Др.Доббс, до таких ученых как Энди Танненбаум.

Мы решили вернуться к этой горячей теме и просто напомнить нынешнему поколению «плотно сидящему на чудесном ООП» о некоторых идеях, которые были высказаны в той знаменитой полемике.




Битва при рядовой конференции

Автор этой нашумевшей статьи, доктор компьютерных наук Стэнфорда, старший архитектор по разработке ПО сначала Sun, а потом и IBM, Ричард Гэбриел, никогда не скрывал своего скептического отношения к парадигме ООП. В 2002 году, по прошествии 2 лет после первоначальной публикации своей критической статьи, автора пригласили выступить, теперь уже живьем и перед большой аудиторией, — изложить свои критические взгляды на ежегодной конференции OOPSLA (центральная конференция IT-специалистов по объектно-ориентированным языкам и методологиям разработки ПО).

И, чтобы по старой доброй американской традиции, превратить это в горячее шоу, в качестве его оппонента одновременно пригласили Гая Стили, отца-разработчика языка Scheme, крупнейшего специалиста-теоретика по ООП, авторитет которого в американской академической среде непререкаем. Чтобы максимально отразить позиции выступающих, их решили усилить ещё двумя выступающими.

В качестве «анти-объектника» дополнительно пригласили Пола Грэма, крупнейшего специалиста по Lisp, автора многочисленных книг и стандартизаций Lisp, кстати, согласно Википедии в 1995 году создавшего вместе с Робертом Моррисом первое в мире web-приложение — Viaweb, которое затем выкупило у них Yahoo (как мы все знаем, Роберт Моррис, близкий друг и коллега Пола, этим историческим достижением не ограничился, до этого он уже успел написать пожалуй самый знаменитый сетевой червь в истории интернета, но это уже совсем другая история).

В стан объектников также пригласили Джеймса Ноубла, автора одних из первых книг и работ по теории ООП. Многие участники вспоминают, что конференция этого года надолго запомнилась им по тому уровню обсуждения, которое завязалось тогда в этой публичной «интеллектуальной дуэли» фактически диаметрально разных школ программирования.

Но факт остаётся фактом: сторона представлявшая объектно-ориентированное программирование, во время открытой дискуссии со своими идейными противниками, под громкий смех зала, даже умудрилась запутаться в своих же концепциях.


ООП как... методология мифология разработки

Люди вспоминают, что у всех создалось стойкое впечатление, что аргументация Lisp’еров была куда убедительней и последовательней, чем сторонников ООП (любопытно, что главным докладчиком по ООП был создатель языка Scheme — главного современного диалекта того же Lisp’а).

Пол Грэм, утверждал, что половина всех концепций ООП являются скорее плохими, чем хорошими, в связи с чем он искренне сочувствует ООП-программистам.
Тогда как вторая половина от оставшихся концепций — и вовсе не имеет никакого отношения к ООП, с которыми их почему-то постоянно ассоциируют

Например, он говорит:

«В восьмидесятых годах метод повторного использования каким-то неясным мне образом связали с объектно-ориентированным программированием, и сколь угодно многочисленные имеющиеся доказательства обратного, по-видимому, уже не избавят этот метод от этого клейма.

Хотя иногда объектно-ориентированный код действительно годится для повторного использования, таким его делает вовсе не объектно-ориентированность, а программирование в стиле „снизу вверх“. Возьмём, например, библиотеки: их можно подгружать и повторно использовать сколько угодно, потому что, по сути, они представляют собой отдельный язык. И при этом, совсем неважно, написаны ли они в объектно-ориентированном стиле или нет.»



Классик программирования Дейкстра, чрезвычайно остро не любит только две вещи: ООП и Калифорнию

Другой крупный критик ООП — это известный специалист по программированию — Александр Степанов, который работая в Bell Labs участвовал в создании C++ вместе c Бьерном Страуструпом, а впоследствии, уже по приглашению в HP Labs, написал Standard Template Library (STL).

Александр Александрович полностью разочаровался в парадигме ООП, в частности он пишет:

«Я уверен, что ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой.

Тоже самое и с программированием: сначала вы должны начинать развивать алгоритмы, и только в конце этой работы приходите к тому, что вы в состоянии сформулировать четкие и непротиворечивые интерфейсы. Именно из-за этой неразберихи в ООП так популярен рефакторинг — из-за ущербности парадигмы вы просто обречены на переписывание программы, уже в тот самый момент, когда только задумали её спроектировать в ООП-стиле».
Ричард Столлман также известен своим критическим отношением к ООП, особенно он любит шутить насчет мифа объектников что ООП «ускоряет разработку программ»:


«Как только ты сказал слово „объект“, можешь сразу забыть о модульности»

«ООП ради самой ООП уже давно превратилось в замкнутый круг. Конечно, можно считать C# в .NET 3.5 с более чем 50,000 реализованных классов „венцом эволюции“. Добавить в следующей версии .NET ещё миллион классов — что может быть более правильным и более вожделенным, с точки зрения ООП-программиста? Говорите, это и есть то самое бегство от сложности?» (на этом месте интервью Ричард демонстративно делает паузу и выкашливается от приступа смеха).
Томас Поток из MIT даже провел масштабное прикладное исследование, которое продемонстрировало, что нет никакой заметной разницы в производительности между программистами работающими в ООП и в обычном процедурном стиле программирования. «Это просто миф, который отлично работает вкупе с невежеством масс — если вы никогда не видели ничего кроме ООП, как же вообще вы можете в ней сомневаться?».

Никлаус Вирт, создатель языков Паскаль и Модула, один из создателей структурного программирования, утверждает, что ООП — не более чем тривиальная надстройка над структурным программированием, и преувеличение её значимости, выражающееся, в том числе, во включении в языки программирования всё новых модных «объектно-ориентированных» средств, безусловно, вредит качеству разрабатываемого программного обеспечения. Никлаус очень удивлен тем вниманием, которое уделяется ныне ООП.


Идеальная разработка с точки зрения ООП...

Ещё один ветеран программистского ремесла, Джоэл Спольски, рассказывает, что во время его работы в Microsoft его так достали тамошние адепты-инженеры ООП, что даже сейчас, по прошествии почти десяти лет, его передергивает от людей, «с головой погрязших» в этой парадигме. Джоел — автор популярного в англоязычной литературе шутливого термина Архитектурные Астронавты, который пошел гулять из его популярной статьи «Не дайте Астронавтам Архитектуры вас запугать», посвященной именно тем самым архитекторам-инженерам из Microsoft, которые так упорно преследовали Джоела со своими абстрактными ООП-концепциями и шаблонами.

О том самом выступлении...

Почти все пункты своего выступления и претензии к ООП как к парадигме, Ричард Гэбриел, позже, заново систематизировал, с учетом имевшего место широкого обсуждения и критики, после чего все было сведено в брошюру, которую Ричард выложил в свободный доступ вместе с поясняющими её слайдами (очень краткое содержание его выступления можно найти и в переводе на русский язык). После этого очень сильного выступления у него появилось очень много последователей, которые попытались систематизировать все мифы и дефекты ООП в своих многочисленных статьях и работах.

К сожалению, вероятно из-за того, что как я уже сказал выше, ответное выступление объектников «Почему ООП не провалилось» получилось несколько скомканным из-за интеллектуального натиска Lisp’еров, выступающие так и не оформили впоследствии свою позицию преимуществ ООП в развернутом виде. В интернете сохранилось лишь очень краткое содержание-конспект их выступления, которое также существует как в английской оригинальной версии, так и в русском переводе.



Сектантство в академической науке

Чтобы вскрыть корни подобного «культа отдельно-взятой технологии», Ричард Гэбриел неожиданно сравнивает нынешнюю ситуацию с ООП с провалом эфиродинамики в физике начала 20 века, когда, в сущности, произошла «тихая революция». Молодые сторонники теории относительности, массово пришедшие в номенклатуру университетов, тогда постепенно захватили власть в области преподавания физики, навязав свою малоизвестную, но столь любимую интеллектуалами того времени теорию относительности уже широким массам физиков.

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

После чего эфир был незаслуженно «закрыт» и отправлен в отставку, и вот, уже нынешнее поколение студентов-физиков даже и не знает о тех весьма успешных опытах по обнаружению эфирного ветра.

«Ну и где мы теперь, с этой вашей красивой теорией относительности, кто-нибудь может мне назвать хоть какие-то реально-практические результаты её применения в вашей обыденной жизни после целого века её ковыряния и массового насаждения?» — как всегда язвительно вопрошает Гэбриел.
По мнению Ричарда, абсолютно с точностью тоже самое произошло и с ООП, которая в 80-ых годах была провозглашена «серебряной пулей» в «борьбе со сложностью программистского бытия», была искусственно и безальтернативно навязана в академической среде, причем мифы, которые кочуют из учебника в учебник по ООП — «часто забавны и высосаны буквально из пальца».
Вместо заключения

Только время покажет, кто в итоге окажется правым, а кто в этой горячей методологической дискуссии — искренне заблуждался. Но в любом случае, лично я за то, чтобы у нас всегда оставались возможности для альтернативных взглядов, пусть даже отличных от выбора большинства (как провокационно замечают американцы в таких случаях — «лемминги не могут ошибаться»).



И да, будьте смелее в своих поисках и размышлениях, не нужно бояться, если в очередной раз в истории вдруг окажется, что... «король-то голый»!
It-developer; talych; krv2k; babys; SeiOkami; kiros; vladir; +7 Ответить 1
28. Александр Лапшин (zfilin) 26.04.12 16:24
Спасибо, читал эту публикацию и даже сам не ее ссылался. =)
29. Дмитрий Баранов (Sunhare) 05.05.12 10:36
Спасибо, написано доходчиво )
30. Алекс Ю (AlexO) 23.05.12 17:58
(27) dandrontiy,
ПО сначала Sun, а потом и IBM

и много он там ПРИКЛАДНЫХ приложений написал?
Другой крупный критик ООП — это известный специалист по программированию — Александр Степанов, который работая в Bell Labs участвовал в создании C++ вместе c Бьерном Страуструпом, а впоследствии, уже по приглашению в HP Labs, написал Standard Template Library (STL).

Т.е. хаял то, что впервые ввели в С++ - объекты и классы? А потом, продолжая хаять, еще и учавствовал в создании библиотек классов?? Он кем там работал - уборщицей? И так же что-ли шипел вслед разработчикам про их "дурацкий ООП, грязь от него одна да песок"? :))
Все-таки, более вероятно, что в статье многое переврано.
Ричард Столлман:
можно считать C# в .NET 3.5 с более чем 50,000 реализованных классов „венцом эволюции“. Добавить в следующей версии .NET ещё миллион классов — что может быть более правильным и более вожделенным, с точки зрения ООП-программиста?

И где Столлман нес такую чепуху? И где Степанов нес подорбную ахинею про программирование и математику? Что-то ссылки дают только более полный текст этой самой статьи, которая, судя по дальнейшим фразам "парни, не путайте генеалогию с гинекологией!", "Ни в каком моделировании наследования не существует — ни в электронике, ни в бухгалтерии, ни в политике, ни где бы то ни было еще." написана отнюдь не для разбора проблем, а для какого-то околокомпьютерного журнала для подростков.
Для незнающих, куда причислили и Степанова - про математику:
Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств.... Т.е. в математике вы заканчиваете аксиомой

Аксиомы потому и названы аксиомами, что они приняты без доказательств как базовые не требущие подтверждения правила для дальнейших рассуждений и математических доказательств. Потому никак нельзя начать с доказательств, чтобы прийти к аксиомам. Все ровно наоборот.
Да и сам автор, - если это был действительно он, - пытается оправдаться за безграмоность "отсутствием времени" и "в статье не ставились цели что-то доказать", а только "эта статья – чисто исторический обзор двух известных выступлений “Почему ООП провалилась“ и “Почему ООП не провалилась“.
неразберихи в ООП так популярен рефакторинг
- рефакторинг как никогда популярен у 1с, которая ни разу ни ООП. Но, конечно же, это говорит только о том, что рефакторинг - это неотъемлемая часть ООП... Вот оно, доказательство (нет, не аксимоам - у нас же аксиома идет после доказательства): 1С - это 100%-ое ООП! :)
kiros; Nelli_A86; +2 Ответить
31. Алекс Ю (AlexO) 17.06.12 01:06
(0) zfilin,
В ООП существует такое понятие, как "статический метод класса".

Мы с вами спорим по теме "ООП в 1С?" уже давно, вот и тут - где в 1С классы? А если никаких классов в 1С нет - то почему статья упорно намекает, что документы-справочники - это "классы", а МодульМенеджера - это метод "статического класса"? :)
Вот здесь:
Такую функцию можно назвать "статическим методом класса", ... не нужен конкретный экземпляр класса (объект, конкретный документ), но она очень тесно логически связана с самим классом ... у конкретного вида документа.

Или вот, по теме статьи.
1С уже настолько запуталась в своих "инновациях" в своем продукте, что скоро потонет в своих придумках.
Нет, чтобы сделать обыкновенный ООП: модуль формы, и - любое количество модулей к объекту; объявляешь экспортной - функция доступна во всех остальных объектах.
Все.
Ну да, еще надо разобраться с областями видимости всего и вся, где 1с наоборот, вносит еще больше путаницы своими доработками платформы.
А у нас НаКлиенте, НаСервере, модуль объекта, модуль менеджера... теперь народ еще и "модуль ссылки" просит...
И в результате просто форменное издевательство над программистами - да вот этот же ДанныеФормыВЗначение взять, к примеру.
(15) coach,
В 8.2 МОЖНО обращаться к экспортным методам объекта, не записывая его. Даже из модуля формы.
См. функцию глобального контекста ДанныеФормыВЗначение().

Ну и как содержание процедур/функций зависит от записи-не записи объекта?
Ладно, дальше, если разбираться с этим ДанныеФормыВЗначение, все еще интереснее.
Для наглядности приведу код с ипользованием ДанныеФормыВЗначение (РеквизитФормыВЗначение - аналогично, только передается не "объект", а имя реквизита формы).
	ДокументПродажи = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.ЗаданиеТорговомуПредставителю"));
	ДокументПродажи.ЗаполнитьУсловияОбслуживанияПоУмолчанию();
   ЗначениеВДанныеФормы(ДокументПродажи,Объект);

Этот код пишется в модуле формы. "ЗаполнитьУсловияОбслуживанияПоУмолчанию" - экспортная (заметьте, в ООП этого было бы достаточно для получения к ней доступа, но не такова 1С - чем сложнее, тем, видимо, лучше) процедура этого же объекта (документа).
Что же здесь происходит?
Исполняется код модуля формы. Но вот незадача - разделение кода на "клиента" и "сервер" (которое программист еще и должен делать сам) не позволяет делать элементарные операции (посмотреть там значение справочника, сравнить с чем-нибудь в базе, запрос запросить) обработки данных, а требует это делать "НаСервере".
Ну, т.е. вы поняли - "держать" операционную систему на себе современный ТСД может, а работать с БД на 1С как равноправный участник процесса - не может.
1С посчитала, что не справится, нечего его "загружать так сильно", и запретила. Сказала, что не царское это дело, и пусть-ка программисты заниматся бесконечным делением НаКлиента и НаСервер. А вдруг кому-то понравится?!
(И ведь нравится! Форумы почитаешь - "курю новую трехзвенку 8.2. Уже начал въезжать!", "Понял разделение на Клиента и Сервер! Скоро уже изучу нюансы!" и т.д. Школьники. Студенты.
Я вот сколько под "тонкого клиента" 8.2 не писал - никак не могу найти ответ на один главный вопрос: ЗАЧЕМ ВСЯ ЭТА ЗАТЕЯ?!)
Но возвращаемся к нашему примеру. Итак, делать ничего нельзя НаКлиенте, но делать что-то все-же надо. Тогда пишем процедуру - НаСервере. И начинаем получать всякие нужные нам данные из базы, сравнивать, делать выводы...
Но тут опять незадача! На сервере теперь уже недоступна наша форма-объект как таковая и данные с неё.
А их, опять же в рамках нормальной логики обработки данных - надо получать периодически во время "серверных" расчетов. И желательно актуальные (часто же невозможно сразу все нужные данные и в нужном виде передать в процедуру НаСервер).
Вот для этого и используется в даннном случае ДанныеФормыВЗначение.
В модуле формы исполняем процедуру НаСервере (а не непосредственно с динамической формы вызываем процедуру модуля объекта - как может показаться из фразы "МОЖНО обращаться ... из модуля формы" - код-то все равно передается на сервер для исполнения, пусть даже он и записан в "модуле формы"; сия запутанность "в форме, но на сервере, потом снова на форме" опять же относится к "великим загадкам" 1с - да за ради чего это надо?), чтобы можно было хоть что-то сделать с данными этой самой формы.
А тут в процессе опять понадобились еще данные с формы, или текущая модификация этих данных, или выполнение/проверка с помощью какой-либо процедуры модуля объекта.
Тогда и запускаем ДанныеФормыВЗначение, где через "серверную" процедуру на сервер передается как-бы ссылка на "объект" (и это не ОбъектСсылка - тот просто еще один "объект" по фантазии 1С), - а указатель на объект динамической формы в памяти, с помощью которого (и указания типа данных, которые нужно искать с помощью этого "указателя") ДанныеФормыВЗначение "читает" объект и создает на сервере копию-"объект" от запрошенного, с "его" данными; а если бы это было не так - а, скажем, в ДанныеФормыВЗначение передается Объект со всеми его данными и сруктурой, - то в этом случае совсем все плохо: и передаем-то полный объект со всей вытекающей нагрузкой, и если он уже "с данными" - мы ж и так "на сервере", так зачем тогда еще раз через ДанныеФормыВЗначение получать данные "объекта"... в общем, уж совсем кривая схема получается).
Потом мы из этого копии-объекта обращаемся или к его процедуре модуля объекта, или получаем значение реквизита, или еще как-то работаем с формой и данными "на ней", т.е. работаем на НаСервере как-будто "изнутри" самой формы через созданный копию-"объект".
Собственно, с этими "указателями" на объект и работой механизма ДанныеФормыВЗначениеРеквизитФормыВЗначение) далеко не все ясно, но, как всегда, инфо от 1С по непосредственной работе платформы и "как оно там все крутится" есть ноль, поэтому это просто мои догадки на основе моих же предположений. Но это только и остается, т.к уж про справку и говорить нечего (хотя тру-1сники усиленно её нахваливают - но, видимо, я не умею её "правильно" (по 1с-овски) читать):
ДанныеФормыВЗначение(<Объект>, <Тип>)
Параметры:
<Объект> (обязательный)
Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.


Так вот, этот самый "Тип" параметра "Объект" везде и всюду в данной команде - задается именно как тип объектов конфигураций 1с: СправочникОбъект.ВидыТоваров, ДокументОбъект.ПеремещениеТоваров и т.д.
А никак не тип "ДанныеФормыСтруктураСКоллекцией". И далее по справке - такая же муть, даже без примеров, и - как всегда, - без объяснения, для чего же опять это все напридумано (ну, для чего все-таки нужна ДанныеФормыВЗначение - надеюсь, я выше описал понятно).
В конце примера - даже можем через ЗначениеВДанныеФормы(..) чего-то модифицированное вернуть на форму...
Вот такие "выкрутасы", - и после этого меня уже не удивляют тормоза в динамических формах, и откуда такие задержки, и прочая пакость в реализации УФ (а ведь это и было той самой главной и знаменитой целью создания и продвижения УФ - упростить и облегчить, чтоб быстро, незаметно и без "излишней нагрузки").
И вот после написания этой небольшой "статьи" - так и остается все тот же вопрос: ЗАЧЕМ и для кого эта система придумана?
KatyariK; ybatiaev; mexedov; jsr; kiruha; talych; sound; inteh; BorovikSV; kiros; yuraos; OksDallas; +12 Ответить 2
32. Алекс Ю (AlexO) 17.06.12 01:18
zfilin, рад, что не спите в столь позднее время, а следите за своими статьями :)
33. Алекс Ю (AlexO) 17.06.12 01:30
(21) akama2001,
спОбязателньыеРеквизиты = Документы.Заказ.ПолучитьСписокОбязательныхРеквизитов(Объект.ВидЗаказа);
вот это жесть написана!!! Объект = Это же заказ!!! т.е. объект уже создан зачем нужно вызывать статический метод класса

Т.е. вас смущает, что в "объект" передается сам же объект (часть его)? А меня вот не смущает - т.к. я знаю, где ООП, а где 1С, где объекты ООП, и "объекты" 1С :)
и передавать туда экземпляр класса то бишь объект...

ну вот, о чем и говорил - уже нашли и классы, и ООП... и вообще, "курят" 1с не как я - затягиваются :))
34. Алекс Ю (AlexO) 17.06.12 01:34
(24) a-novoselov,
Вызов экспортных методов менеджера не требует создания самого объекта.

только вот что-то нет примеров применения модуля менеджера не из самого - уже созданного, - объекта для получения доступа к данным формы/процедуре модуля этого же объекта, а вызова функции в этом "модуле менеджера" другого, не текущего объекта.
Везде требуется - передача "указателя" (см. пост (31) ) на "объект". Который должен быть создан для получения этого "указателя".
Т.е. требует создания, требует.
И никак иначе.
Посмотрел внимательно этот "урок" - что-то дурной он какой-то. В частности, по модулю менеджера:
Основное предназначение данного модуля – это переопределение стандартного события выбора, которое возникает в момент ввода по строке и расширение функционала менеджера

Ввод по строке в 8.2 - вообще вещь неуправляемая, и каким боком тут модуль менеджера - непонятно.
Модуль компилируется на стороне сервера.

это верно. Собственно, это определется его (модулем менеджера) предназначением - исполняться на сервере, и быть привязанным к объекту, чтобы "светить" процедурами вовне.
А вот про модуль команды не указано, что он компилируется - и виден, - только на клиенте и исполняется только по "кнопке"-владельцу, и больше ниоткуда.
35. Александр Лапшин (zfilin) 17.06.12 01:35
(33) AlexO, Спасибо за интерес к статье, но вот прямо сейчас я, право слово, не готов даже прочесть ваш весьма развернутый комментарий. Поддался минутной слабости и шлепнул коньячку. Боюсь, что сейчас вам "наотвечаю". =)

Но непременно посмотрю и отвечу по-делу. Наверняка вы неравнодушны к вопросу ООП в 1С, раз так подробно изложили своем мнение, а значит в какой-то степени мы с вами единомышленники, даже если и оппоненты.
36. Алекс Ю (AlexO) 17.06.12 01:44
(18) Rusmus,
совсем замечательно будет, если еще добавят модуль ссылки, функции в котором получали бы в качестве контекста запись таблицы.

что вы пониматете под "модуль ссылки"? какие функции он должен нести?
А где вы вообще в 1С8 нашли хоть какой-то контекст объектов - форм, документов, табличных частей? А тем более - в полном запрете в 8.2 использования какого-либо "контекста" объектов при разделении на Клиента и Сервер, требующего принудительной передачи "туда-сюда" данных.
Если же вы хотите получать ДАННЫЕ ТЧ, вкладки, поля и т.д., то в 8.2 ССЫЛКА на "объект" сама по себе имеет отдаленное отношение к данные этого объекта. Т.к. - см. выше: ссылку-то с динамической формы на сервере мы видим, а вот данные - нет.
И, боюсь, у 1С в этом случае (при уже созданной кошмарной системе УФ 8.3) останется только один вариант: делать модуль ТЧ, модуль ПоляВвода, модуль Вкладки...
Сейчас подобное реализуемо, если в функцию в модуле менеджера передавать ссылку через параметры, но как-то это не совсем удобно

А из переданного в модуль менеджера объекта вы ссылку на него получить не можете? :)
37. Алекс Ю (AlexO) 17.06.12 01:46
(35) zfilin,
значит в какой-то степени мы с вами единомышленники, даже если и оппоненты.

я только за то, чтобы вы, как человек, знакомый с ООП, не подменяли термины, следуя "1С-стайл", и путались сами :)
38. Алекс Ю (AlexO) 17.06.12 13:00
Еще про "ООП в 1С" - я вот тут развернуто про "объекты 1С" написал:
Запутался в менеджерах и терминологии 1с
39. Владимир (hogik) 17.06.12 18:10
(31)
"... вопрос: ЗАЧЕМ и для кого эта система придумана? "©
AlexO.
1) Для кого.
Для программистов, которые рассматривают "любую систему сугубо под углом RAD"(с).
2) Зачем.
Думаю, надо для начала ответить на вопрос - "почему?".
"...классическая реляционная модель не имеет готовых средств для поддержки иерархии данных и ее реализация всегда требует кропотливой работы."(с) [ http://v8.1c.ru/metod/architecture/ ]
И при этом разработчики 1С-а путают модель СУБД с её ЯМД. ;-)
На мой взгляд, вся суть "развития" 1С-продуктов - это попытка приспособить SQL для задач предметной области, где требуется "иерархия данных".
40. Алекс Ю (AlexO) 17.06.12 21:01
(39) hogik,
под углом RAD

про RAD - вот здесь я уже написал свое мнение:
"RAD - это среда быстрой разработки приложений. ПРИЛОЖЕНИЙ. Любых. Универсальных и не очень. Простых и сложных. Гибких и дубовых.
А не тюнинг 1с-базы под нужды пользователя с параллельным изучением текущих взглядов на мир Бориса Нуралиева."
Для программистов

для каких программистов? для кодеров - может быть. Для программистов - что-то не вижу ни смысла, ни цели. Одни палки в колеса.
Мелкие исправления-поблажки с 8.2.14 - не перетягивают болото УФ.
41. Алекс Ю (AlexO) 17.06.12 21:27
(39) hogik,
И при этом разработчики 1С-а путают модель СУБД с её ЯМД

они даже и не знают, что это такое и почему по-отдельности - это судя по статье.
вся суть "развития" 1С-продуктов - это попытка приспособить SQL для задач предметной области

Ну да, хоть что-то путное приспособить для хоть какой-то работы. Сравните, как работает "чистый" 1С в файловом варианте с её-нной БД.
где требуется "иерархия данных".

что за иерархия данных такая дивная, как работает, как её эффективно использовать, и чем она полезна разработчикам - так и осталось за кадром со времен этой статейки с 2004 года.
Вообще, та статья - очередная агитка от 1с, не стоящая серьезного внимания:
Идеология использования метаданных в самых общих словах сводится к простому тезису: "Давайте не будет программировать все функции разрабатываемого решения. Расскажем платформе о составе, структуре, особенностях и взаимосвязи различных его частей, и пусть остальное она сделает сама".

орфография статьи сохранена.
Т.е. на самом деле - 1С наоборот, все старается переложить на программиста (разделение клиент-сервер в УФ, платформа не может самостоятельно определить тип данных, заполненность значения (ЗначениеЗаполнено работает с переменными, но не с данными), правильно обработать ошибки, легко связывать кнопки, ТЧ и документы, просто заполнить отчет на основании таблицы регистра или другого "объекта" без дополнительных плясок(а их и нет - "полных" таблиц)... и т.д.
Правильно в конце приписка - "Расскажем платформе о составе, структуре, особенностях и взаимосвязи различных его частей", как хранить, что писать, куда писать - а больше ей и делать ничего не надо, лишь бы в ссылках не запуталась.. Только вот с "не программировать все функции разрабатываемого решения" - это никак не вяжется. Наоборот, все надо предусматривать наперед.
С одной стороны необходимо обрабатывать большие объемы данных, а с другой - обеспечивать широкую функциональность и высокую производительность.

а обработка больших объемов и производительность - оно не связано, нет? И вообще, как SQL и остальных СУБД удается сочетать и то, и другое, и третье, и прочее...
В "1С:Предприятии" используется смешанный подход

не смешанный, а смешной там подход используется :)
Для всех операций модификации данных (создания, изменения и удаления) в "1С:Предприятии" применяется исключительно объектная техника. Это означает, что разработчик взаимодействует с БД не на уровне записей, а с помощью объектов, соответствующих хранимым в БД сущностям. ... Разработчик имеет при этом возможность написать обработчики событий, связанных с изменением данных, выполняя с их помощью различные проверки ... Система обеспечивает ... поддержку объектного подхода, осуществляя, например, кэширование объектов, контроль объектной и ссылочной целостности и т.д.

гладко было на бумаге, да забыли про овраги. Особенно доставляет удовольствие про "контроль объектной и ссылочной целостности". Наверняка, <Объект не найден> и ошибки SDBL - это происки sql-щиков. Вот как они 1С не любят - пакостят как только могут..
А про "разработчик взаимодействует с БД не на уровне записей" - так это я уже тут всем доказываю десять лет. Что нет никакой РБД в 1С, нет никаких "записей-объектов", нет никаких индексов и оптимизации, и прочего ничего нет из реального мира хранения данных, а есть каша из ссылок и вообще свалка и бардак.
Одним из ключевых преимуществ объектно-реляционной парадигмы управления данными является наглядность и простота разработки приложений.

и где в 1С такая парадигма реализована? Типа, сложили РБД SQL и скрипты 1С (назвав их "объектами") - и получили "объектно-реляционную парадигму" (видимо, настолько сильная парадигма, что 1С её не выкладывает из-за её сложности и эффективности - вдруг украдут).
Декларативное описание запросов, в свою очередь, позволяет получать сколь угодно сложные выборки данных и предоставляет мощные возможности агрегирования, необходимые для решения аналитических задач.

да, настолько "сколь угодно сложные", что пишутся запросы на 10 листов для прсото сравнить несколько десятков "объектов" между собой (привет ЗУП).
Ну, и агрегирование там же и так же.
эффективную обработку больших объемов информации

это теоретически? или хранение 1 млн записей и обработка 1 млн записей - для 1с одно и то же?
система предлагает еще один способ доступа к данным - динамические выборки. Этот механизм позволяет обращаться к очень большим объемам данных, обеспечивая считывание информации порциями. При этом разработчик, только указывает, какие данные необходимо получать, а система автоматически выполняет обращения к БД с необходимой гранулярностью.

необходимая гранулярность - это жестко определенная 1с порция в 21 запись? Это я уже не говорю про применение выборок "на больших объемах данных" (читаем: для них-то и сделаны эти Выборки!), когда наоборот, рекомендуют использовать запросы и не заморачиваться "выборками". И чем, интересно, эти выборки заточены под "большие объемы", когда как набор условий - минимален, перебирает - все данные источника порциями, и т.д.
В общем, классическая 1С-агитка.
ybatiaev; semario; orfos; talych; sound; vladir; hogik; +7 Ответить 2
42. Владимир (hogik) 17.06.12 21:54
(40)(41)
... (AlexO).
Извините, давая ссылку на статью, я не предполагал её чтения Вами.
Просто, обязан был дать ссылку на первоисточник. ;-)
А, вот, на цитате про RAD забыл дать ссылку. ;-)
43. Алекс Ю (AlexO) 17.06.12 21:58
(42) hogik,
да я еще в 2003, когда там стали появляться "базовые" статейки - забросил с их чтением: ничего путного и практичсекого, только время теряешь :)
44. Владимир (hogik) 17.06.12 23:49
(41)(43)
... (AlexO).
Вы действительно считаете, что попытка "что-то путное приспособить"(с) в лице SQL - не является корнем (причиной), критикуемых Вами, "решений" от 1С-а?
45. Алекс Ю (AlexO) 18.06.12 01:34
(44) hogik,
ну давайте не будем опять :) ...
я уже лет пять назад устал доказывать - курица или яйцо, т.е. кто на что влияет - SQL, который сам по себе самодостаточная СУБД, но возможности которой используюся 1С процентов на 10. Или 1С, которая вдруг взяла - и выбрала MS SQL для хранения своих таблиц.
Как один их "дешевых" из платных. И не таких сложных.
46. Владимир (hogik) 18.06.12 02:14
(45)
"ну давайте не будем опять :) ... я уже лет пять назад устал доказывать"(с)
... (AlexO).
Лично, мне - Вы ничего не доказывали. :-)
Надеюсь в фразе "SQL, который сам по себе самодостаточная СУБД,"(с) Вы описались.
Я Вас не спрашивал почему 1С-ы выбрали ту или иную СУБД.
Я Вас спрашивал про SQL, как - ЯМД. И его "особенности" при работе с "иерархическими данными". На коих стоит вся наша около-1С-овая деятельность. Которую Вы охарактеризовали как: "ничего нет из реального мира хранения данных, а есть каша из ссылок и вообще свалка и бардак."(с).
47. Алексей Новоселов (a-novoselov) 18.06.12 10:42
(34)
Предопределенная процедура из модуля менеджера объекта:
ОбработкаПолученияДанныхВыбора (ChoiceDataGetProcessing)
Синтаксис:

ОбработкаПолученияДанныхВыбора(<ДанныеВыбора>, <Параметры>, <СтандартнаяОбработка>)

Описание:

Возникает на сервере перед стандартным формированием списка при вводе по строке, автоподборе текста и быстром выборе, а также при выполнении метода ПолучитьДанныеВыбора.


И почему же ввод по строке вещь неуправляемая? Вполне даже можем управлять, формировать собственный список найденных элементов и помещать его в данные выбора и т.д.

Далее.
Насчет обращения к методам объекта без создания самого объекта. В типовых конфигурациях, например, уже давно процедуры печати перенесены из модуля объекта в модуль менеджера. Зачем? Поясню. У нас есть ссылка на документ (скажем ОрдерСсылка), мы хотим его напечатать. Если экспортная процедура печати расположена в модуле объекта, то для печати документа нам нужно будет вызвать ее следующим образом: ОрдерСсылка.ПолучитьОбъект.Печать();
Если же процедура расположена в модуле менеджера, то нам ее нужно будет вызывать как: Документы.Ордер.Печать(ОрдерСсылка);
Для чего это нужно? Во-первых, избегаем лишнего вызова функции получения объекта по ссылке. Во-вторых, в параметры процедуры мы можем передать список документов для пакетной печати. Если раньше для пакетной печати какого-либо вида документов делалась отдельная обработка или функции печати выносились в общий модуль, то теперь функции можно расположить в модуле менеджера, что логичнее и уменьшает количество неразберихи в конфигурации.
48. Алекс Ю (AlexO) 18.06.12 10:46
(46) hogik,
И его "особенности" при работе с "иерархическими данными".

1С вольна сама разрабатывать представление как угодно. И выбран далеко не самый лучший вариант - в плане обработки и целостности данных.
Лично, мне - Вы ничего не доказывали. :-)

эти споры поднимаются постоянно :)
Особенно - когда новое поколение студентов подкатывает.
Которую Вы охарактеризовали как:

да, именно так и охарактеризовал. Вы хотите поговорить об этом? А мне цитировать самого себя про "ссылка на ссылке и ссылкой погоняет" и "в результате ничего ни проверить, ни проконтролировать"? :)
SQL-то к этой 1с-ой кухне какое отношение имеет? Хорошо, раз не понимаете - другими словами, что мешало 1С выбрать более "подходящую" СУБД? Или более качественно проработать свою систему представления и хранения? Чтобы она как можно ближе ложилась на реляционные таблицы SQL? Или вообще - разработать такой 1с-сервер, который бы дублировал функции СУБД по записи, хранению, контролю, оптимизации, извлечении, анализу записей данных?
Т.е. придумали фигню, кое-как всунули ящик, фигня там скомканная и неоптимизированная, но виноват - ящик, в который положили?
Ну право слово, Вы уж сами-то подумайте, о чем мы тут можем спорить?
А то все "Я Вас спрашивал про SQL, как - ЯМД", "...в лице SQL - не является корнем...", слова всякие умные :)
49. Алекс Ю (AlexO) 18.06.12 10:57
(47) a-novoselov,
Насчет обращения к методам объекта без создания самого объекта.

вот именно, обращения к методам объекта БЕЗ ПЕРЕДАЧИ ИНФО ОБ УЖЕ СОЗДАННОМ ОБЪЕКТЕ.
Приходится писать крупно, потому что вы, как тру-1сник, уводите меня в сторону :)
Причем тут МодульМенеджера и печать, когда туда (в начале обработки печати) передается этот самый созданный объект, и - вау! - вы вызываете МодульМенеджера обрабатываемого в данный момент объекта, данные о котором в полном объеме (для УФ 8.2) присутствуют и кочуют из одного общего модуля в другой, пока не дойдет это все до МодульМенеджер объекта, данные из которого и выводится на печать.
А вы вызовите из внешнего модуля на печать не текущий документ, а любой другой. И посмотрим, как не будет создаваться объект.
И обсудим.
И почему же ввод по строке вещь неуправляемая?

потому, что неуправляемая. Или, может я не добрался еще до этого в 8.2, покажите запрос или мезанизм, который управляет вводом по строке.
А также - возможность его отключить :)
Или что вы понимаете под "ввод по строке"?
50. Александр Лапшин (zfilin) 18.06.12 11:32
AlexO, Извините, мне сложно понять вашу позицию в отношении ООП и 1С, так как ваша мысль разрознена по комментариям и сводится к критике комментариев других участников. В списке ваших публикаций я не нашел статей посвященных ООП, а приведенные тут ссылки на форум опять-таки, ссылаются на ваши критические комментарии обращенные к другим участникам дискуссии.
Я понимаю, что стили изложения своей точки зрения у всех разные, но было бы проще, если бы вы последовательно и полно изложили свой взгляд в отдельной статье.

Если же это не представляется возможным, то нам лучше не не вступать в дискуссию и разрабатывать тему 1С и ООП отдельно друг от друга, поскольку мне тяжело вычитывать такие разрозненные комментарии и я не вижу как бы это помогло в нашем общем деле изучения и совершенствования 1С.
talych; Nelli_A86; +2 Ответить 3
51. Алекс Ю (AlexO) 18.06.12 11:52
(50) zfilin,
какую статью по "ООП в 1С" вы хотите? "Отсутствие ООП в 1С"?
уже была масса тем, где это обсуждалось - в том числе, в последних и с вами. Берете оттуда примеры "почему ООП" или "почему не ООП" - и статья готова :)
На форуме колективный разум давно уже набросал эту статью полностью.
52. Алексей Новоселов (a-novoselov) 18.06.12 11:58
(50) Либо очень тонкий тролль, либо неадекват... В любом случае дискуссия не будет продуктивной.
53. Алекс Ю (AlexO) 18.06.12 11:59
(50) zfilin,
мне сложно понять

я не понимаю, почему вам сложно - я всегда пытаюсь найти и вытащить конкретные моменты несоответствия 1с парадигмам ООП.
А не обсуждать агитки 1с.
Но вы не хотите обсудить конкретные вопросы (например, почему "если такая ООП - такой бардак в Запутался я в терминологии 1С), а пытаетесь несуществующие, - на мой взгляд, - декларативные функции 1С обсудить в рамках "генерального сражения" - в одном месте, всеми силами, основные армии, статья противников - против агиток 1С :)
54. Алекс Ю (AlexO) 18.06.12 12:01
(52) a-novoselov,
все дискуссии надменных "тру1с-ников" без агиток 1с-а сводятся к одному:
"сам вы неадекват".
Неужели ничего ни за собой нет, ни в голове, что без 1с-ового вранья - ничего больше нельзя сказать?!
55. Алекс Ю (AlexO) 18.06.12 12:09
Я вот - благодаря вашей "объектной модели 1С", которую вы так рьяно защищете без каких-либо доказательств, - даже не могу программно поменять тип данных у реквизита или ПоляВвода, связанного с ним, потому как для уже созданного "объекта" свойство резко стало "ТолькоДляЧтения".
Ну, кто готов обсудить данную конкретную проблему "ООП в 1С"- почему это так, что делать, и где тут "объекты ООП"???
Ну, кому это интересно? Или агитки интереснее читать, а потом сыпать "да вы тролль, да неадекват, да наша 1с самая-пресамая!"??
Но только деградация вокруг да ветер пустоты...
56. Алексей Новоселов (a-novoselov) 18.06.12 12:14
(54) С 1С работаю около трех лет, до этого C++, PL/SQL, Oracle, базы данных на 10 000 пользователей. Согласен, что 1С не самая лучшая система, 100 пользователей кое-как тянет с жутким скрипом. Но как может адекватный человек задать вопрос "что вы понимаете под "ввод по строке"?"... Как ни странно, понимаю "Ввод по строке", но отвечать на такие вопросы бессмысленно.
57. Александр Лапшин (zfilin) 18.06.12 12:16
(52) a-novoselov, Угу. Не кормите, не надо.
58. Алекс Ю (AlexO) 18.06.12 12:34
(56) a-novoselov,
Как ни странно, понимаю "Ввод по строке",

ответ настоящего 1с-ника. Гордитесь.
(57) zfilin,
Угу. Не кормите, не надо.

а что еще может предложить тру-1сник? еще и a-novoselov подскажите в черный список занести - верно, я сильно буду переживать :)
59. Алекс Ю (AlexO) 18.06.12 13:03
(56) a-novoselov,
до этого C++, PL/SQL, Oracle, базы данных на 10 000 пользователей.

значит, впрок не пошло. Мимо пролетело.
А меня - так вот уже достает, что ни новый проект на 1с - так куча ограничений, и часами придумывать новые и новые пути обхода 1с-ного кошмара.
А потом на форумах 1с - видеть решения "да все нормально", "да все хорошо", "ООП в 1С!" и "наши в футбол выйграют?"
60. Владимир (hogik) 18.06.12 18:08
(48)
"Ну право слово, Вы уж сами-то подумайте, о чем мы тут можем спорить?"
... (AlexO).
Я, вроде, с Вами и не спорю. ;-)
Пытаюсь Вам подсунуть информацию для размышления на тему: "ЗАЧЕМ ВСЯ ЭТА ЗАТЕЯ?!"(с). Намекнул Вам о причине... Действительно - "виноват - ящик"(с).
Но, чувствую после такого бреда с Вашей стороны: "на реляционные таблицы SQL"(с) разговаривать с Вами бесполезно. Т.е. если "студент" ставить знак равенство между моделью СУБД и ЯМД, то ему следует повторить школьную программу. :-)
61. Алекс Ю (AlexO) 18.06.12 18:16
(60) hogik,
знак равенство между моделью СУБД и ЯМД

где СУБД и где SQL в 1С?
Из чего состоит трехзвенная архитектура 1с?
Как они взаимодействуют?
Я-то давно знаю, что пробелы в заниях 1с-ников - массовые и зияющие. Что в 1с, что в СУБД.
Не обижайтесь, а лучше разберитесь, и разгребите кашу по поводу СУБД и 1С :)
62. Алекс Ю (AlexO) 18.06.12 18:24
(60) hogik,
и забудьте вы про свой "ЯМД" - выдрав ЯМД из СУБД, вы обозвали так весь SQL, запутались, и наворачиваете на это новые навороты :)
63. Владимир (hogik) 18.06.12 19:22
(61)(62)
... (AlexO).
У меня такое впечатление, что Вы все мои высказывания пропускаете через "сито 1С" и свое понимание "объектности" как только методологию программирования.
Для справки:
1) Я не использую и не собираюсь использовать продукты 1С.
2) Использую СУБД и варюсь в этой сфере с начала 70-х годов.
Еще раз повторяю специально для Вас:
"вся суть "развития" 1С-продуктов - это попытка приспособить SQL для задач предметной области, где требуется "иерархия данных".
И если Вы этого пока не понимаете, то рекомендую запомнить и принять эту информацию к сведению. Возможно позже поймете... :-)
64. Сергей Самошин (saiten) 21.06.12 00:11
(49)
Причем тут МодульМенеджера и печать, когда туда (в начале обработки печати) передается этот самый созданный объект, и - вау! - вы вызываете МодульМенеджера обрабатываемого в данный момент объекта, данные о котором в полном объеме (для УФ 8.2) присутствуют и кочуют из одного общего модуля в другой, пока не дойдет это все до МодульМенеджер объекта, данные из которого и выводится на печать.
В (47), в общем-то, всё достаточно подробно расписано. Без создания объекта - чтобы не тащить в память из БД все реквизиты и таблицы объекта: в функцию модуля передаётся ссылка, по ссылке запросом берём только то, что нужно для печати. И никакого тягания объекта из модуля в модуль. А почему в модуле менеджера, а не в общем модуле - об этом как раз публикация.
Кстати, обвинять эту статью в притягивании за уши парадигм ООП к 1С - это, даже не знаю, паранойя что ли... Скорее, это демонстрация людям, знакомым с ООП, концепции использования модуля менеджера через аналогию со статическими методами класса. Аналогию, кстати, весьма удачную, на мой взгляд: по сути, прочитал название - и сразу всё понятно.
65. Сергей Самошин (saiten) 21.06.12 00:22
И, да простит меня автор за оффтоп, но заинтересовало вот это: (48)
1С вольна сама разрабатывать представление как угодно. И выбран далеко не самый лучший вариант - в плане обработки и целостности данных.
Раз выбран не лучший вариант - значит вы знаете другие? Не поделитесь знаниями, хотя бы в виде ссылок? Это не совсем праздный интерес: когда 1С стремительно начала хоронить себя в нише автоматизации торговли (УТ11, РТ2, заявление о прекращении поддержки УТ10) появилась шальная мысль - создать своё, и пока 1С не очухается и выйдет из комы пометь какой-никакой профит. Собственно, идея заглохла как только начали продумывать интерфейс библиотеки управления данными: получалось, почти один в один, как 1С:77. Что заставило крепко задуматься: то ли 1С настолько основательно разъел мозг, то ли по-другому действительно никак.
67. Александр Лапшин (zfilin) 21.06.12 10:15
(64) saiten, Спасибо большое, как вы ловко всё пояснили. Я про свою статью лучше бы не сказал. =)
68. Владимир (hogik) 24.06.12 04:08
(48)
... (AlexO).
Очень сильно ;-) присоединяюсь к вопросу из (65) сообщения, в части:
"...вы знаете другие? Не поделитесь знаниями, ...?"(с)
P.S. И я приношу извинения автору темы "за оффтоп"(с).
69. Алекс Ю (AlexO) 25.06.12 17:27
(68) hogik,
(65) saiten,
Раз выбран не лучший вариант - значит вы знаете другие?

Мне страшно становится - если вы не знаете про:
MS SQL, немного объектный реляционный ORACLE...
70. Юрий Осипов (yuraos) 14.03.13 09:47
Такс опять склоки насчет того нужен ООП или нет.

Уже как то скучно ... ну не нравится ООП 1с-овцам
и не когда они его не реализуют в платформе!!!

Хотя могли бы это и сделать...

Для меня довольно очевидным, что сама платформа 1С
была "списана" с MS Visual Basic for Application
что рулит приложениями Оффиса.
А там поддержка классов была с самого начала.
Хочешь - пользуйся, хочешь - нет
71. Юрий Осипов (yuraos) 14.03.13 09:56
(70)
Другой вопросик меня интерисует:

Модуль объекта и Модуль менеджера объекта
фактичкски являются средством инкапсуляции и
повторного использования функционала, связанного с объектом (или классом объектов).

Покрайней мере я привык его так использовать ... в обычном приложении.

Но вот в управляемом приложении на платформе <= 8.2.14
столкнулся с такой бедой:
На стороне клиента не доступны
(как КЛАСС - извинят меня противники ООП)
ни сам Объект ни его Менеджер
Соответственно не доступен и функционал, инкапсулированный в них.

Изменилось ли что-нибудь по этой части в >= 8.2.15 и 8.3.х ???
72. Алекс Ю (AlexO) 14.03.13 10:06
(71) yuraos,
ни сам Объектни его Менеджер

В УФ они никогда и не были доступны. Только контекст самой формы, который надо передавать на сервер, там обрабатывать, и возвращать обратно в форму, т.к. контекст формы - недоступен напрямую на сервере.
Ни в 8.2.14, ни в каких других 8.2. Ни в 8.3.
Это - управляемое приложение, поделка от 1С, в которой ценности - на грош, зато понтов и мусора - на грузовик.
А в толстом клиенте все так и осталось - объекты доступны в контексте формы.
Только клтиента нет как такового.
А в УФ и клиента не сделали нормального, и перлопатили и извратили все так, что все приходится делать через одно место сервер на клиента, и с клиента - на сервер.
sound; yuraos; +2 Ответить 2
73. Алекс Ю (AlexO) 14.03.13 10:09
(70) yuraos,
что сама платформа 1С
была "списана" с MS Visual Basic for Application

и близко не стояла.
То, что вам кажется, будто АВТОМАТИЗАЦИЯ (rapid app dev) в чем-то похожа - то и тут ничего подобного: MS идет от задач программирования (если пишет СРЕДСТВО ПРОГРАММИРОВАНИЯ), а 1С - от содержания плевка, упавшего с потолка, и оставленного там неизвестно кем неизвестно когда.
74. Юрий Осипов (yuraos) 14.03.13 15:10
(72)(73) AlexO,
- УРА! МЫ НАУЧИЛИСЬ ВЫРЕЗАТЬ ГЛАНДЫ!!!
- ФУУУУУУ!!!
- Через ЖЖЖЖЖЖЖЖЖЖЖЖЖ!!!!
- УУУУУУУ!!!
---
Нелюбовь к ООП, переросшая уже на клиент-серверный уровнь !!!
75. Юрий Осипов (yuraos) 06.04.13 08:44
(72) AlexO,
самое забавное во всем этом клиент-серверном мракобесии,
что не всегда для работы формы
ей нужно обращаться
к базе занных и следовательно к серверу.
---
на этот случай наверное в свойствах
корня конфигурации добавили галку
"Использовать обычные формы в управляемом приложении"
76. Елена из Средиземья (Lacrimosa0000) 21.05.13 12:26
Обсуждение не менее интересное и познавательное, чем статья. Спасибо, уважаемые комментаторы.)
77. Юрий Осипов (yuraos) 21.05.13 17:29
(76) Lacrimosa0000, ага, пожалуста!
---
многие тут узнают, что это за зверь ООП
...
и что некоторые заслуженные товарищи ЕГО за что-то невзлюбили.
78. ProFix (Alex1Cnic) 22.05.13 11:36
Объясняется просто и понятно... ПЛЮССС
79. Василий Казьмин (awk) 23.05.13 00:10
А что такое ООП? ООП на PHP5 это эмуляция классов через модули. На JavaScript ООП реализовано через прототипы и классов там нет и в помине. В джаве, с++ и т.п. классы определены как синтаксис, но в двоичном коде отсутствуют.

Так кто сказал, что ООП - это классы?

ООП Это инкапсуляция, наследование (прототипирование) и полиморфизм.

Как реализовать полиморфизм в 1С - я знаю. (Причем, спецификация на уровне платформы не поддерживается - ковыряйся программист)

Как реализовать на 1С инкапсуляцию? Ответа - нет.
Как реализовать на 1С наследование (прототипирование)? Ответа - нет. Тот что есть - крив.
80. Tindir Mindir (tindir) 23.05.13 07:15
Блин. статья интересна. теперь наверное во всех крупных решениях количество общих модулей уменьшится и все они уйдут в менеджеры,и УРА! опять переписывать все не типовые ВПФ и Отчеты! А тка идея очень хорошая и удобная. все методы для отдельных объектов будут только храниться в объекте (по идее должны)
81. Сергей Маслов (LexSeIch) 23.05.13 08:58
Мир этому дому! Статья интересная. Коротко и ясно.
82. Юрий Осипов (yuraos) 23.05.13 13:56
(80) tindir,
все будет так хорошо и красиво только в обычном приложении
...
а в управляемом приложении не все так, как бы хотелось
с учетом замечаний в (71)
---
сам недавно для совместимости с управляемыми извращениями
часть функционала перетягивал из модуля объекта и модуля менеджера объекта
в те самые общие модули
83. sound sound (sound) 27.05.13 11:43
Мне вот тоже кажется, что очень уж много тупизны (ну или неразберихи, сложностей, всего того, о чем так рьяно пишет в каментах AlexO) они для этих управляемых форм понаворотили. Еще не знаю, что окажется сложнее для разработчика: переход с 7-ки на 8-ку, или переход с обычных форм на управляемые.
Вообще рассуждая на тему "Зачем они это сделали" на ум приходит две мысли:

1) Или пока не доделали, и как обычно дали сырой инструмент.
2) Или просто философия фирмы 1С направлена на какое-то запутывание чтоли, чтоб уж если ты специалист по 1С (не
в смысле сдал их же тупой экзамен на спеца), то уж точно никто другой, кроме таких же "собратьев 1С", пришедший в "отрасль 1С" "из других языков и программ" не смог бы сходу разобраться в логике работы прикладного решения, и не смог бы "вот тут мне добавить колонку" или "слегка подправить отчетик" - дайте новичку разобраться с логикой работы оборотно-сальдовой ведомости в бухгалтерии или с регламентированным отчетом. И чтобы без этого спеца было НуНиКакНеОбойтись, а что, вполне себе и франчам нормальное обеспечение куска хлеба. То бишь, сводится все это к какой-то банальной наживе чтоли, хотя может и не очень удачное выражение. Нет, я не против того, что любой труд должен быть оплачен, но получается у 1С все как-то через одно место.

По теме: статья, несмотря на всю критику 1С, в принципе, полезная :)
84. Александр Лапшин (zfilin) 27.05.13 12:07
(83) sound, А вы посмотрите видео с четвертой встречи клуба - http://club-1c.zfilin.org.ua/2013/03/blog-post.html

На мой взгляд управляемые формы подчинены общей идее платформы и очень органично в нее вписываются. Ну, за исключением некоторых неприятных деталей, о которых тоже говорится в видео.
85. sound sound (sound) 27.05.13 12:36
(84) zfilin, Не смог посмотреть это видео, что-то со звуком, не исключаю что глюки с моей стороны.
Может быть в общую идею управляемые формы и вписываются органично, но вот в мой мозг однозначно нет :). Если же под "неприятными деталями" подразумевается постоянный "перегон" данных с клиента на сервер, и запутывание разработчика, то это имхо маразмом попахивает, хотели сделать просто и удобно, а получилось сложно и запутанно, зато органично. Ну не знаю, не знаю, время все рассудит =)
86. Александр Лапшин (zfilin) 27.05.13 12:56
(85) sound, Нет, перегон данных между клиентом и сервером это как раз одна из лучших фишек управляемых форм.
Жаль, что со звуком не получилось, собственно, доклад изначально рассчитан на то, чтобы "уложить управляемые формы в голову разработчику". Это его главная тема.
87. sound sound (sound) 27.05.13 15:16
Прошу прощения у автора за оффтоп!

(86) zfilin, посмотрел таки видео, не до конца правда, досмотрел до 10-й минуты 3-й части, утомило: во-первых, качество видео плохое, не видно что там на доске. Во-вторых, без обид, доклад так себе: докладчик путается в терминологии, доклад не структурирован, логика очень плохо просматривается, может быть я, как человек закончивший физмат, предъявляю слишком высокие требования к бесплатному видео? :). В-третьих, пока не увидел каких-то практических доводов, одна теория, похожая, кстати, на какие-то агитки от фирмы 1С (выражаясь языком AlexO), чувствуется какая-то заинтересованность в том, чтобы все не ломали, не украли, и под УФ писали, и наверное только у вас все 1С-ное покупали :)

Так что "уложить управляемые формы в голову разработчику", во всяком случае в мою голову, таким видео точно не удастся, ну либо я просто не разработчик вовсе, чего я собственно не исключаю :)

Ну и в-четвертых, признаюсь честно, не слишком-то много я в принципе знаком с этими управляемыми формами, поэтому сильно спорить и доказывать свою правоту не стану. Но с другой стороны, говоря о типовых конфигурациях фирмы 1С, так сказать о венце творения, что-то не заметил я тех дико функциональных конфигураций, которые бы враз затмили собой все те типовые, которые написаны под обычные формы, как 8-ка не затмила 7-ку.
Вот есть у меня типовой "Документооборот", по тупости начальства внедряли не сами, а услугами франчей, заплатили как обычно просто гигантскую сумму денег. "Документооборот" на управляемых формах, вот фигня фигней, других слов нету! И ладно бы он прям ЛЕТАЛ, а то ведь тупит, даже не так, ТУПИТ страшно. Может "тупить" от слова "типовой"? :) Весь функционал свелся к переписке служебками "чтоб история была", кароче можно было просто почту нормальную сделать, или сделать гораздо функциональнее и чтоб летало на 1С 7.7.

Да, наверно закупив еще сервачок на пару лямов все завертится, но что-то мне подсказывает что дело-то было не в бабине. Вот когда фирма 1С перепишет все типовые (или уже?) на УФ, и своим веским словом в одночасье перестанет обновлять типовые на обычных формах, как она обычно это делает (это бизнес, детка!), вот тогда я задумаюсь о серьезном изучении УФ, может заодно за это время жизнь изменится к лучшему :)
88. Александр Лапшин (zfilin) 27.05.13 15:59
(87) sound, Что ж, в любом случае желаю вам все-таки "разобраться и уложить", когда возникнет такая необходимость.
89. Юрий Осипов (yuraos) 27.05.13 16:20
(87) sound,

Вот есть у меня типовой "Документооборот", по тупости начальства внедряли не сами, а услугами франчей, заплатили как обычно просто гигантскую сумму денег. "Документооборот" на управляемых формах, вот фигня фигней, других слов нету! И ладно бы он прям ЛЕТАЛ, а то ведь тупит, даже не так, ТУПИТ страшно.

Это, я бы сказал, художественная правда жызни!
90. Юрий Осипов (yuraos) 27.05.13 16:23
(89)
ЗЫ
---
А еще те, у кого "Документооборот" в клиент-серверном варианте работает
(так сказать в родной для управляемого приложения обстановке)

те наверное знают об ошибках времени исполнения,
связанных с передачей мутабельных типов с клиента на сервер...
91. Юрий Осипов (yuraos) 27.05.13 16:24
(90)
ЗЫ
ЗЫ
---
таких ошибок по идее недолжно быть,
если разработчики тестировали свою конфу для клиент-серверной базы!
92. Rett Batler (batlerrett) 03.06.13 10:49
Хорошая годная статья по практическому применению.
Жаль что переросла в холивор на тему 1С - это плохо/хорошо.
1С изначально придумана для решения конкретных проблем.
Думаю размышления к какой области относится 1С, должны волновать "бородатых" теоретиков),
а у нас конкретные задачи учета.
93. Виктор (vvirus) 27.01.14 12:29
Модуль Менеджера - мощьная идея.
для реализации обращений ко всем у типу метаданных

можно убрать шаманство в виде хранения секунд в комментарии перечислений с последующим получением ч/з

ЭлементПеречисления.метаданные().Получить(ЭлементПеречисления.метаданные().Индекс)).Комментарий;

убрать функции в общих модулях и переложить их в модуль менеджера

а в части иммитатора ООП
как создание своего класса можно использовать внешние обработки

94. Талыч Sha (talych) 28.02.14 11:21
Спасибо за статью. Всё расписано чётко. Насчет холивара, согласен что УФ в 1С через одно место. Вместо упрощения программирования получили нечто монстрообразное ((
95. Александр Полтава (Патриот) 21.08.14 10:51
(0) +
статья хороша, она позволяет проследить аналогию методов решения некоторых проблем разработчиками платформы 1С с другими языками программирования, а то, что эта аналогия не является биективной и всеобъемлющей, не стоило таких сильных нападок на статью, кои разгорелись в комментах.
(93) vvirus,
как создание своего класса можно использовать внешние обработки
абсолютно согласен - у обработки есть свойства (реквизиты и экспортные переменные модуля объекта) и методы (экспортные процедуры и функции модуля объекта), есть конструктор экземпляра объекта
ОбработкаОбъект = ВнешниеОбработки.Создать("полный путь к файлу");
, деструктора в явном виде нет, но мы всегда можем принудительно осуществить его вызов, убив все ссылки на объект. Конструктор не позволяет передать параметры, в соответствии с которыми создастся объект, но всё решается одной строчкой кода
ОбработкаОбъект.Инициализировать(куча параметров);
, где "Инициализировать" это заранее прописанный программистом метод обработки, выполняющий доконструирование объекта (первоначальную инициализацию, в зависимости от переданных параметров). А теперь вопрос, а почему только об обработках речь? Вышеописанные характеристики присущи даже формам объектов, не говоря уже о документах и справочниках. Форму можно создать, не создавая при этом объект, в ней есть всё те же импровизированные свойства методы и конструктор с деструктором. Кстати, если мы хотим нагрузить деструктор какими-то более сложными действиями, чем убийство объекта, то в можно как и в случае с методом "Инициализировать" написать метод "ДеИнициализировать". А в случае с формой так вообще можно использовать событие "ПриЗакрытии", если до этого было событие "ПриОткрытии".
96. Александр Лапшин (zfilin) 21.08.14 23:51
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа