Имя: Пароль:
1C
Спам
8.3, ЭтотОбъект, полиморфизм, обезьяна и граната
, , ,
0 Поросенок Петр
 
26.07.13
13:28
1. Будет использовано в 1-2 местах 31% (4)
2. Я ничего не понял 23% (3)
3. Ничего не изменится. 15% (2)
4. Будем активно использовать это свойство 15% (2)
5. КГ/АМ 15% (2)
Всего мнений: 13

На пятницу так сказать.

В 8.3 общие модули обзавелись свойством "ЭтотОбъект".

С одной стороны событие небольшое.
С другой стороны, имея "гениальное" мышление (дадад именно про кого вы подумали) это открывает целую поляну для разного рода извращений, когда порядок и место выполнения кода определяется в момент выполнения программы. (Т.е. например, модули имеют одинаковые экспортные методы, которые вызываются в зависимости от значения переменной типа "общий модуль")

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

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

Как думаете?
1 ДенисЧ
 
26.07.13
13:30
собстно

Я ничего не понял
3 eklmn
 
гуру
26.07.13
13:33
я вот думаю это нытье или наезд на Самого?

Я ничего не понял
4 1Сергей
 
26.07.13
13:34
(3) судя по нику - нытьё :)

Ничего не изменится.
5 cw014
 
26.07.13
13:35
Я так думаю, что это свойство "ТолькоЧтение"

Ничего не изменится.
6 Поросенок Петр
 
26.07.13
13:37
Да, да плачу крокодильими слезами.

Например:

Есть различные модули для проведения по взаиморасчетам. Где нить в коде:

МодульПроведения = ТралиВалиПереопределяемый.ПолучитьМодульПроведенияПРоВзаиморасчетам();

МодульПроведения.Провести(ЭтотОбъект);
7 vde69
 
модератор
26.07.13
13:38
а почему бы и нет...

Будем активно использовать это свойство
8 Fragster
 
модератор
26.07.13
13:38
(6) ну так раньше для этого обработки использовали
9 Поросенок Петр
 
26.07.13
13:43
Ха, на сервере недоступен. Интересно почему... Видимо кина не будет.
10 ptiz
 
26.07.13
13:58
Пока не понимаю, как это можно использовать.

Будет использовано в 1-2 местах
11 orefkov
 
26.07.13
13:58
Итак, после 10 лет мытарств, 1С таки вернулась к Контекст :)
12 Hmster
 
26.07.13
14:26
на самом деле это форма
13 Hmster
 
26.07.13
14:27
но неразберихи может внести, интересно зачем его добавили?
14 Infsams654
 
26.07.13
14:29
сложно сказать. Возможно общий модуль хотят все-таки (когдаНибуУдь!) превратить в полноценный объект (в полиморфизм, тудыть его). Правда, тогда и у объекта свойства должны появиться, а не только методы. Соответственно, процедуры общего модуля должны будут работать с этими свойствами, а не через параметры, передаваемые неизвестно от куда.

КГ/АМ
15 Hmster
 
26.07.13
14:32
(12) че -то я не то прочитал, пора заканчивать неделю рабочую
16 vde69
 
модератор
26.07.13
14:37
(12) ха, а может автор действительно с контекстом перепутал???
17 Поросенок Петр
 
26.07.13
14:38
ОбщийМодуль.ЭтотОбъект (CommonModule.ThisObject)
ОбщийМодуль (CommonModule)
ЭтотОбъект (ThisObject)
Использование:

Только чтение.
Описание:

Тип: ОбщийМодуль.
Содержит сам объект базы данных. Используется для передачи в качестве параметра.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
18 Поросенок Петр
 
26.07.13
17:47
Кстати ещё фича 8.3 в копилку ООП (хотя скорее к модульности).  
Переопределяемые типы. Это конечно круто. Только почему-то нельзя указать его в параметрах команды.
19 Serginio1
 
26.07.13
17:54
(0) Никакого оиношения к ООП не имеет, а к утинной типизации

Например Есть Функция

Функция ВернутьЗначениеФункцииМодуля(модуль)
модул.ВыполнитьТакуютоФункцию()
КонецФункции

Для этого иногда нужно передать в другой модуль ссылку на себя.
20 Infsams654
 
30.07.13
13:05
(19) сомневаюсь я однако, зачем тогда так наворачивать
Можно и без этого сделать:

Функция ВернутьЗначениеФункцииМодуля(ИмяМодуля)
Перем Результат;
Выполнить("Результат = " + ИмяМодуля + ".ВыполнитьТакуютоФункцию()");
Возврат Результат;
КонецФункции
21 GROOVY
 
модератор
30.07.13
13:14
ЭтотОбъект используется при описании оповещений при открытии форм, для отслеживания события закрытия формы, для отказа от модальных окон.

Написал криво, но, как по другому, придумать не могу :)
22 Asmody
 
30.07.13
13:27
вот когда будет что-то типа ЭтотМодуль.Функции, вот тогда приходите
23 magicSan
 
30.07.13
13:27
со своим полиморфизмом, все ветки исплакали - как  только внедрят полноценное ООП, начнуть стонать что такое полиморфизмом нафига его сделали и что с ним делать

КГ/АМ
24 Asmody
 
30.07.13
13:30
а еще пусть будет что-то типа

МояФункция = Новый Функция(...);
25 Fragster
 
модератор
30.07.13
13:30
(22) рефлекшн нужен?
26 Fragster
 
модератор
30.07.13
13:30
(24) да. и передача с клиента на сервер ;)
27 Fragster
 
модератор
30.07.13
13:32
а вообще лично мне не хватает нормального управления индексами
28 Asmody
 
30.07.13
14:00
(24)+ причем, частично где-то в недрах что-то похожее уже сделано, динамическое назначение обработчиков событий и оповещений же есть!
29 Лодырь
 
30.07.13
14:10
Значит ли это, что 1Сники перестанут быть тупыми и жадными? Ибо держать в башке все свежие возможности платформы(и особенно иметь практический опыт работы со всей этой белибердой) становится тяжеловато.

Будет использовано в 1-2 местах
30 Serginio1
 
30.07.13
14:24
(20) А зачем использовать строки если можно использовать утинную типизацию?
Учитывая что может быть множество параметров и вызываться множесво функций с разными параметрами

Вместо модуль.ФункцияС3Параметрами(пар1,пар2,пар3)
       модуль.ПроцедураС2Параметрами(пар1,пар2)

Тебе нужно городить либо универсальную функцию либо для каждой функциии процедуры городить свою обертку.

Просто утинная типизация это не ООП, но применяется во многих языках вместо интерфейсов
wiki:%D3%F2%E8%ED%E0%FF_%F2%E8%EF%E8%E7%E0%F6%E8%FF
31 Infsams654
 
30.07.13
14:56
(30) это все решаемо как в (20). Вот и вопрос то в том - это "утинная" типизация, или 1С двигает что-то большее. Сдается мне, что все-таки, 1С выдумывает нечто...
32 Ненавижу 1С
 
гуру
30.07.13
14:58
общие модули это же вроде объекты-синглтоны, не?
33 DailyLookingOnA Sunse
 
30.07.13
15:01
(9)
На сервере недоступно только свойство.
Сам тип доступен везде, методы общего модуля (т.е. процедуры и функции) доступны в толстом клиенте и серверах.

Т.е. на клиенте через глобальный контекст получаешь общий модуль, получаешь свойство и передаешь на сервер.
34 Ненавижу 1С
 
гуру
30.07.13
15:01
(33) а проще нельзя жить?
35 Infsams654
 
30.07.13
15:06
(32) ОМ в принципе не объект, т.к. не содержит свойств, не создается экземпляра. На счет синглтона - в 1С есть менеджер объекта.
36 YHVVH
 
30.07.13
15:08
ниче не понял, может кто объяснит что к чему
37 DailyLookingOnA Sunse
 
30.07.13
15:08
В конфигураторе пора подсистемы корневой веткой делать.
Достали они модули плодить.
По наименованию документа или справочника хоть как-то можно догадаться, что там делается.
А вот о чем говорит наименование "ФайловыеФункцииСлужебныйКлиентПовтИсп".

Будет использовано в 1-2 местах
38 Ненавижу 1С
 
гуру
30.07.13
15:10
(35) нет свойств еще не значит, что не объект
насчет нет экземпляра - так вот он ЭтотОбъект и он единственен
насчет менеджеров, так теперь разницы стало меньше, кстати они тоже не содержат свойств
39 DailyLookingOnA Sunse
 
30.07.13
15:13
(34)
Будут чаще модули тасовать.
Сейчас переименование вызывает необходимость изменений в других модулях.
А так - поменяют в точке вызова и всёёё. Где-нибудь в параметрах сеанса.
40 Ranger_83
 
30.07.13
15:14
(37)открой для себя систему стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8
41 Serginio1
 
30.07.13
15:16
(31) Еще раз это решаемо в 20 с помощью лишнего ненужного кода. Если есть возможность использовать утиную типизацию, зачем городить огород. Ничего в ЭтотОбъект сверхнового нет.
Можно было и раньше передать из модуля на себя только введя больше кода ИмяМодуля. Но вот если ты вдруг захотел изменить имя модуля то пойдут ошибки. Например

В модуле общегоНазначения можно передать ссылку на себя таким образом

Функция ВызватьПриветИзДругогоМодуля()  Экспорт

ОбщиеМеханизмы.ВызватьПривет(общегоНазначения)
КонецФункции // Привет()


А во такой код

Функция ВызватьПриветИзДругогоМодуля()  Экспорт

ОбщиеМеханизмы.ВызватьПривет(ЭтотОбъект)
КонецФункции // Привет()

Не зависит от переименования,лаконичен более читабелен
42 DailyLookingOnA Sunse
 
30.07.13
15:19
(20),(41)
Посмотрел на партнерском.
Таки в УТ 11 уже городят:
"
МодульСоединенияИБКлиент = Вычислить("СоединенияИБКлиент");
МодульСоединенияИБКлиент.ПриНачалеРаботыСистемы();
"
43 DailyLookingOnA Sunse
 
30.07.13
15:21
(40)
Система - это громко сказано.
Скорее - текущее состояние болезни.
44 wowik
 
30.07.13
15:21
-1

Я ничего не понял
45 Infsams654
 
30.07.13
15:31
(42) - (38), (41) вот и начинают работать с ОМ как с объектом, хотя это просто набор методов. (38) - объектом может быть что-то в реальной модели системы: документ, элемент справочника и т.п.
46 Ненавижу 1С
 
гуру
30.07.13
15:34
(45) синглтон это не объект?
47 Serginio1
 
30.07.13
15:35
COM объект это не объект? Это объект поддерживающий IDispatch двойную диспетчеризацию. В 1С все такие, правда 1С еще поддерживает ILanguageExtender. В 1С нет ООП, но объекты то существуют.
48 Ненавижу 1С
 
гуру
30.07.13
15:36
(47) думаю они еще поиграются своим великом, а лет через 5 плюнут и напишут 9-ку с ООП
и будем переходить снова-и-снова
49 Ахиллес
 
30.07.13
15:38
Пессимист говорит, что ситуация - хуже быть не может, а оптимист отвечает, что ещё, как может быть.

Будем активно использовать это свойство
50 Serginio1
 
30.07.13
15:42
(45) А менеджер справочника это что?
(48) Я думаю что будущее за синтезом ООП, ФП, и динамических языков. (Иногда вычислить ооочень удобная штука для универсализации). 1С могла бы давно ввести псевдотипизацию как подсказка типа хотя бы для интеллисенсе.

Например
Функция ВернутьТз(Парам:СписокЗначений):ТаблицаЗначений
51 Infsams654
 
30.07.13
15:52
(50)  А менеджер справочника это что?
Это статические методы этого справочника, не объекта справочника.
Вообще ОМ нафиг бы не нужны если бы было ООП.
52 Infsams654
 
30.07.13
15:56
(50) кстати о птичках. А как на счет менеджера объекта обработки, если она внешняя ?
53 Infsams654
 
30.07.13
15:56
(52) + правда это уже другая тема
54 Serginio1
 
30.07.13
16:01
(51) Не совсем. Например в Delphi статические методы могут быть виртуальными. Там VMT в две стороны, в положительную сторону для методов объекта, для типа в отрицательную.
Опять статические методы в статически не типизируемом языке могут быть только через объекты типа синглтон.
И статические методы не являются прерогативой ООП.

(52) Это объект поддерживающий двойную диспетчеризацию.
55 Serginio1
 
30.07.13
16:08

Будет использовано в 1-2 местах
56 Infsams654
 
30.07.13
16:37
(55) это касается только 1С, про виртуальные в 1С вообще никакой речи не идет
"могут быть только через объекты типа синглтон" - лучше вообще умолчать об этом (не говорить что у ОМ есть ЭтотОбъект) и не вводить народ в заблуждение
57 Infsams654
 
30.07.13
16:42
на счет 54+ http://rsdn.ru/forum/philosophy/561976.aspx
то это просто пережитки перехода к настоящему ООП. Смотри Java и пр. настоящие ООП языки
58 Ненавижу 1С
 
гуру
30.07.13
16:43
(56) про виртуальные методы? да в каком то смысле все методы в 1С виртуальные
59 Serginio1
 
30.07.13
16:43
(56) А чем тебе плох ЭтотОбъект см 41. ЭтотОбъект это ссылка на объект реализующий IDispatch
60 Serginio1
 
30.07.13
16:48
(56) Внутри 1С конечно существует OOП. Просто наружу они выдают, что типа IDispatch. А у него все то 2 метода которые и переопределяются на основании метаданных.
61 Serginio1
 
30.07.13
16:52
(57) Угу пережитки. Сейчас Шарп поддерживает и функциональщину (лямбды, LINQ) и динамические вызовы dynamic. И метаклассы только расширяют язык.
62 Infsams654
 
30.07.13
16:57
(58) в 1С не может быть виртуальных методов, т.к. не наследуемости
63 Rovan
 
гуру
30.07.13
17:01
(52) а зачем ?
ведь к ней можно обращаться только когда она создана в памяти
а если объект создан, то значит доступен модуль объекта
64 Infsams654
 
30.07.13
17:02
(62) + ошибка: нет наследуемости. Т.к. наследования нет, то и нечего городить VMT
65 Ненавижу 1С
 
гуру
30.07.13
17:05
(62) для виртуализации не нужна наследумость, нужен общий интерфейс, а за счет утиной типизации ее полно
66 Infsams654
 
30.07.13
17:06
(63) посмотри БП 3.0. Там вся печать в документах (и даже в обработках), к примеру идет через менеджер объекта.
Если делать аналогично во внешних обработках, то не прокатит. А хотелось, бы , чтоб механизм печати был однотипный.
67 Infsams654
 
30.07.13
17:13
(65) опять, же. Так. наз. , в "Утиная типизация" в 1С - это размывание модели, т.е. посмотри в типовых: куча методов в разных ОМ, порою, одинаковых, не связанных с конкретными объектами, а то и формами и т.п., от куда там ноги растут - сложно сказать, даже если все разложено по подсистемам. Разве что Ctrl + Shift + F
68 Serginio1
 
30.07.13
18:04
(64) Для реализии IDispatch без VMT не обойтись.

(66) Почему я на 7ке пользуюсь
ДляВнешнегоСоединения= Сервер.ВнешниеОбработки.Создать(ПутьКОбработке);
    
    Объект=ДляВнешнегоСоединения.ВычислитьВыражение("Документы.ЗаказПоставщику.СоздатьДокумент()");
69 Serginio1
 
30.07.13
18:06
68 Вернее так как в 7 ке нет поддержки свойств массивов

В модуле обработки есть две фкнкции

Функция ВычислитьВыражение(Выражение) Экспорт
  возврат вычислить(Выражение);    
КонецФункции

Функция ВычислитьСвойствоОбъекта(Объект,Свойство) Экспорт
  возврат Объект[Свойство];    
КонецФункции

и их вызов
Объект=ДляВнешнегоСоединения.ВычислитьВыражение("Справочники."+ВидПриемник+".СоздатьЭлемент()");
70 Serginio1
 
30.07.13
18:12
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн