Имя: Пароль:
1C
 
&Вместо - это что? Что такое аннотация в классическом понимании в программировании?
0 yumuh
 
08.04.19
10:04
Прочитал это
https://wonderland.v8.1c.ru/blog/razvitie-mekhanizma-rasshireniy-konfiguratsii-15/

Как статья связана с полиморфизмом, наследованием, инкапсуляцией?
1 Aleksey
 
08.04.19
10:05
а должна быть связь?
2 yumuh
 
08.04.19
10:06
(1) знал бы, не спросил)
3 VladZ
 
08.04.19
10:09
(0) "Как статья связана с полиморфизмом, наследованием, инкапсуляцией?" - Кто сказал, что должна быть связь?
4 Mort
 
08.04.19
10:11
public override OnSomething(...)
5 Вафель
 
08.04.19
10:12
так это же наследование в чистом виде
6 Garykom
 
гуру
08.04.19
10:14
7 1Сергей
 
08.04.19
10:18
&Заместо
8 Garykom
 
гуру
08.04.19
10:19
(6)+ Но в 1С это не совсем переопределение а свое изобретение для функционального программирования.

&Вместо выполняется всегда в отличие от ООП где метод выполняется в зависимости от объекта.
Вот если разработчики в 1С добавят возможность вызывать исходный метод, хотя есть расширение где он перекрыт, каким то специальным вызовом будет похоже.
9 Asmody
 
08.04.19
10:22
Аннотации - это метаметки в коде, которые могут содержать информацию для анализа, компиляции и выполнения кода.

В данном случае аннотация указывает, что метод расширения должна выполняться _вместо_ метода конфигурации.
10 Толянчик
 
08.04.19
10:30
А почему конструктор аутоматически добавляет к аннтоации &Вместо инструкцию ПродолжитьВызов()? Что это означает?
11 yumuh
 
08.04.19
10:31
понял. Всем спасибо!
12 Sysanin_1ц
 
08.04.19
13:18
(11) С точки зрения классических ЯП (Питон в частности) подобные аннотации можно отнести к категории декораторов функций. Но 1С как обычно идет своим путем (велосипедом, граблями нужное подчеркнуть), поэтому механизм расширений можно рассматривать как сильно усеченный вариант наследования
13 Сияющий в темноте
 
08.04.19
13:55
это не совсем наследование.
мы можем делать оперативную замену функций в коде,причем даже внутренних,для которых наследования в классических языках нет.
это скорее попытка использования указателей на функции и их замена у обьекта.

просто,есть функции методы обьекта,которые можно переопределить,создав новый обьект,а есть поля обьекта,с указателями на функции,которые можно менять в рантайм.
расширение же есть замена или добавление в вызов функции на этапе компилляции кода.
общий модуль-это не обьект и не интерфейс,а просто набор кода.
14 Вафель
 
08.04.19
14:44
(13) так наследование есть, а инкапсуляции нет
15 Вафель
 
08.04.19
14:45
(12) ну уж точно не декораторы это.
когда же это override был декоратором?
16 Sysanin_1ц
 
08.04.19
15:17
(15) В Питоне декоратор переопределяет функцию
17 Толянчик
 
08.04.19
15:24
Простой пример как всё в 1С сделано через жпо. Мне нужно несколько печатных форм УПД с небольшими изменениями типовой. Все процедуры печати лежат в ОМ, точка входа функция ПечатьКомплектаУПД. Это экспортная функция, но процедура, где идёт заполнение параметров табличного документа ВывестиСчетФактуруВТабличныйДокумент, не экспортная. Т.е. мне надо для каждой печатной формы всё это барахло затаскивать в обработку, только ради того чтобы добавить пару реквизитов в печатную форму. А сделать несколько расширений чтобы кастомно менять для каждой обработки печати, я не могу, т.к. применяются они все.
18 Casey1984
 
09.04.19
07:44
(17) Зачем несколько расширений? В одном расширении допилить функцию, чтоб в зависимости от печатной формы она делала нужные вещи, нельзя?
19 Провинциальный 1сник
 
09.04.19
08:18
(17) Это жпо началось относительно недавно, раньше в типовых было более адекватно разделено на общие и экспортные функции, что позволяло сторонним разработчикам использовать методы платформы. Сейчас же, похоже, цель поставлена прямо противоположная - максимально усложнить работу постороннего кода с типовыми механизмами. Взять хотя бы экспортные процедуры для работы с объектом, но принимающие в качестве параметра форму, при том что форма используется лишь чтобы получить объект - сплошь и рядом такое.
20 Толянчик
 
09.04.19
08:22
(18) И будет очередной колхоз из множества Если ИначеЕсли. А мы тут за наследование говорим.
21 Толянчик
 
09.04.19
08:27
(19) методы платформы? методы конфигураций ты наверно хотел сказать
22 Провинциальный 1сник
 
09.04.19
08:28
(21) Да, правильное уточнение. Имел в виду именно методы конфигураций..
23 bolder
 
09.04.19
08:49
(19) Тоже столкнулся с такой фигней.Этож надо, использовать методы формы для общееобьектных задач!Зла не хватает,все переписывать.
24 Salimbek
 
09.04.19
08:58
(17) А нельзя через &Вместо объявить нужную тебе процедуру глобального модуля (ВывестиСчетФактуруВТабличныйДокумент) как Экспортную?
25 bolder
 
09.04.19
09:02
(0) По сути это ближе всего к директивам препроцессора.
26 Толянчик
 
09.04.19
09:04
(24) Если уж ее менять в расширении, то проще сделать как говорит (18) Но при этом получится (20)
27 bolder
 
09.04.19
09:04
(10) Мне тоже это интересно.Чего там продолжать то надо?
28 Толянчик
 
09.04.19
09:08
(27) это какой-то дикий колхоз: если так напишешь, то всё равно выполнится переопределяемая процедура или функция, но ты можешь написать свой код до или после её вызова.
29 Провинциальный 1сник
 
09.04.19
09:09
(28) По сути, эта возможность делает ненужными &После и &Перед, ибо полностью покрывает их функциональность.
30 sqr4
 
09.04.19
09:11
(29) Это ты про "Вместо"?
31 bolder
 
09.04.19
09:14
(28) Вот это прикол,зря они так...
32 bolder
 
09.04.19
09:18
(30) Да нет, смотри(10).
33 Cyberhawk
 
09.04.19
09:21
(27) (28) (31) Не слушайте (29) - для функций это не так, поэтому и сделали ПродолжитьВызов
34 bolder
 
09.04.19
09:35
(33) Да, верно.Руки дошли открыть 2 ред.известной книжечки Е.Ю.Хрусталевой.Смысл ПродолжитьВызов() для процедур в едином контексте выполнения,а для функций это мегаудобно.
35 Провинциальный 1сник
 
09.04.19
09:45
(33) Обоснуйте. Что можно сделать через &Перед и &После, что нельзя сделать через &Вместо с применением ПродолжитьВызов()?
36 craxx
 
09.04.19
09:59
(0) никак не связана, 1С не является ООП в классическом смысле.
37 Вафель
 
09.04.19
10:12
(35) 1сники не поймут, поэтому решили упростить )))
38 Cyberhawk
 
09.04.19
10:31
(35) В общем случае сделать можно все, но походу ты не понял, какую именно часть Я оспаривал в твоем утверждении о ненужности :)
Для функций ведь нет технической возможности использовать аннотации "перед" и "после".
39 Cyberhawk
 
09.04.19
10:33
(37) Вроде как для наглядности / простоты сделали для процедур "перед" и "после"
40 Cyberhawk
 
09.04.19
10:33
Ибо внимание - самый ценный ресурс. Негоже его насиловать там, где этого можно избежать.
41 Толянчик
 
09.04.19
10:41
(38) ты как обычно пукнул в лужу, а другие должны додумывать что же ты имел в виду
42 Cyberhawk
 
09.04.19
10:50
(41) Конечно. Я раздаю удочки, а не кормлю рыбкой ))
43 Толянчик
 
09.04.19
11:14
Все эти &Перед &После и ПродолжитьВызов годятся для модулей, разработчики которых предусматривают переопределение. Например как в БСП ОбменДаннымиПереопределяемый в процедуре ПолучитьПланыОбмена можно дописать свои планы обмена. Но покуда разработчики типовых делают как в (17) единственный вариант это делать &Вместо. А поскольку механизм сравнения по типу показа дважды измененных в расширениях отсутствует, польза от всего этого вундервафельства чуть менее чем никакая.
44 Вафель
 
09.04.19
11:15
печ формы для реализации вообще через полное жпо сделаны.
доработке практически не поддаются
45 Толянчик
 
09.04.19
11:15
+(43) Возможно станет получше в 8.3.15 https://wonderland.v8.1c.ru/blog/razvitie-mekhanizma-rasshireniy-konfiguratsii-15/
46 Вафель
 
09.04.19
11:16
лучше бы разработчиков типовых пинали сильнее
47 Вафель
 
09.04.19
11:17
и тот пример что они привели решается куда проще через "вместо"
48 NorthWind
 
10.04.19
09:31
(0) немедленно вспомнился анекдот про лучшее средство для контрацепции - стакан воды. Соответственно задается вопрос - когда принимать, до или после? Ответ - вместо :)
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший