Имя: Пароль:
1C
1С v8
Архитектура, прячущаяся за стандартными параметрами обработчиков
0 loonypy
 
19.03.12
15:51
Например, ОбработкаПроведения(Отказ, Режим).
Отказ и Режим -- это свойства каждого элемента (объекта) документа?
1 Maxus43
 
19.03.12
15:53
да
2 Maxus43
 
19.03.12
15:53
для каждых объектов есть список предопределённых процедур и параметров к ним
3 Maxus43
 
19.03.12
15:59
При чем некоторые параметры не указаны явно. например "ПараметрОбъектКопирования" в форме документа, нигде не засвечен, но он есть. как суслик.
4 loonypy
 
19.03.12
16:13
ООП-мышление:
"Создаю обработку проведения для элемента документа. Элемент - объект. Следовательно:
ЭлементДокумента.ОбработкаПроведения();"
Зачем тогда указывать параметры?.
Хотя в 1с ооп вроде бы нет. Тогда можно организовать так: передавать в обработчик параметром сам элемент. Например, ОбработкаПроведения(ЭлементДокумента). Тогда доступ к свойствам получаем через точку (например, ЭлементДокумента.Отказ = Истина, ЭлементДокумента.Режим = Исключительный).
Но в 1с как-то по-другому сделано.
5 Maxus43
 
19.03.12
16:14
(4) Предопределённые события типа ОбработкиПроведения - так не вызываются, они не экспортные. Они срабатывают в каждом объекте при определённых условиях. Типа триггеров в СУБД
6 Fragster
 
гуру
19.03.12
16:14
отказ это не свойство объекта, так как оно не хранится вообще ни разу
7 Fragster
 
гуру
19.03.12
16:14
это свойство события
8 Maxus43
 
19.03.12
16:15
(6) ну можно сказать и свойство, только свойство конкретного объекта, доступное только во время его жизни
9 Maxus43
 
19.03.12
16:15
да, события лучше
10 Живой Ископаемый
 
19.03.12
16:16
2(6) ДопСвойства тоже не хранятся, и свойство ОбменДанными тоже не хранится, но таки свойства объектов...
11 Fragster
 
гуру
19.03.12
16:16
(8) не совсем так... это свойство объекта, реализующего интерфейс "Событие", которое передается в метод объекта, реализующий интерфейс "Справочник"
12 ILM
 
гуру
19.03.12
16:16
(8) и во время события
13 Fragster
 
гуру
19.03.12
16:17
(10) хранятся, но только в памяти... отказ же не существует вне события
14 Fragster
 
гуру
19.03.12
16:18
(11)+ только вот отдельного объекта "событие" нет (да и не сильно он нужен), так что всё по старинке передается параметрами
15 loonypy
 
19.03.12
16:31
Тема начинает разрывать мне мозг.
Пока так:
- есть элемент документа. Состоит из свойств: реквизитов и др.
- есть процедуры, работающие с этим элементом (в терминах ООП - его методы). Располагаются в модуле объекта (модуле этого элемента).
все верно или что-то не так?
16 Ненавижу 1С
 
гуру
19.03.12
16:36
в терминах ООП ОбработкаПроведения(Отказ, Режим) это что-то вроде
виртуальной функции базового класса, которую можно переопределить (override), сохраняя сигнатуру
17 milan
 
19.03.12
16:41
(15) пытаешься изучать ооп на примере 1С ? сильный ход
18 loonypy
 
19.03.12
16:46
>>виртуальной функции базового класса, которую можно переопределить (override), сохраняя сигнатуру
меня больше другое интересует. Fragster написал, что Отказ - свойство события, а не объекта. Этого не понял. Обработчик события - процедура, код. А что из себя представляет событие? Какая-нибудь служебная структура?
19 Maxus43
 
19.03.12
16:46
Есть объекты метаданных - своего рода Классы, основная логика их работы предопределена системой, есть определённый набор методов, свойств.
забудь ООП всяк сюда входящий...
20 Живой Ископаемый
 
19.03.12
16:49
зачем в этой ветке 19 (прописью: девятнадцать!!!!) постов без объяснения зачем это все?
21 Maxus43
 
19.03.12
16:49
(18) Проведение - стандартный механизм "класса" Документ. Он вызывает "Событие" : проведение документа. У события есть предопределённая процедура ОбработкаПроведения с параметрами, которые доступны только в рамках этого события (ПриЗаписи и ПередЗаписью ещё)
22 Ненавижу 1С
 
гуру
19.03.12
16:51
у методов нет никаких "свойств", Отказ это аргумент метода, передающийся по ссылке
23 Maxus43
 
19.03.12
16:54
короче нас троллят)
24 loonypy
 
19.03.12
16:56
>> постов без объяснения зачем это все?
Есть процедуры, которые работают с элементом документа\справочника. В них параметрами передаются Отказ, Режим, РежимЗаписи и прочие. Так вот вопрос: как, черт возьми, они связаны с элементом документа\справочника, который процедура обрабатывает? В примере ОбработкаПроведения(Отказ, Режим) такое чувство, что эти параметры берутся из ниоткуда и никакого отношения к обрабатываемому элементу не имеют.  

>>короче нас троллят)
не, у меня просто мозг медленно перестраивается.
25 loonypy
 
19.03.12
16:57
упорот ООП:(
26 Живой Ископаемый
 
19.03.12
16:58
да, не относятся к объекту... берутся ниокуда? они опеределены с этими параметрами
27 Maxus43
 
19.03.12
16:59
(24) Отказ - поставив в истину ты скажеш платформе НЕ проводить документ. Режим - в каком режиме проводится документ (оперативный/неоперативный). Режим записи - в каком режиме записывается объект. всё это предопределено платформой, и значения данных параметров - предопределены
28 Живой Ископаемый
 
19.03.12
16:59
2(25) Купи букварь Габца простые пример разработки. и не пытайся натянуть шаблон ооп к 1с
29 Fragster
 
гуру
19.03.12
17:01
(24) "такое чувство, что эти параметры берутся из ниоткуда и никакого отношения к обрабатываемому элементу не имеют"
именно так!
что-то типа
Объект.Записать(РежимЗаписи)

Внутри объект.провести:
Объект
Привэйт функшин ПередЗаписью(
Привэйт функшин ОбработкаПроведеиня(
Привэйт функшин ПриЗаписи(
Паблик функшн Записать(РежимЗаписи)
 НасратьВЛог();
 булеан Отказ;
 Зыс.ПередЗаписью(РежимЗаписи, Отказ);
 иф Отказ зен тров эксепшн("Не получилось");
 Зыс.ОбработкаПроведеиня(Отказ)
 иф Отказ зен тров эксепшн("Не получилось");
 Зыс.ЗаписатьВБазу (мегаприват функшн без оверрайда)
 Зыс.ПриЗаписи(РежимЗаписи, Отказ);
 иф Отказ зен тров эксепшн("Не получилось");
...
30 Ненавижу 1С
 
гуру
19.03.12
17:03
(29) ПередЗаписью и ПриЗаписи логично делать протектед ))
31 Fragster
 
гуру
19.03.12
17:06
(30) а зачем? ведь их прототипы не должны быть доступны (типа парент.ПриЗаписи())
32 Fragster
 
гуру
19.03.12
17:06
(31)+ хотя чота я кажися загоняюсь, надо будет дома освежить
33 Ахиллес
 
19.03.12
17:14
(29) Да ладно? Перед проведением документ уже записан в базу. Если сомневаешься, попробуй в обработке проведения реквизиты документа поменять :-)
34 loonypy
 
19.03.12
17:15
>>да, не относятся к объекту
>>всё это предопределено платформой
Черт. Тут же работа еще и на уровне платформы идет.

>>Купи букварь Габца простые пример разработки
В офисе есть по 8.1. Сгодится или программирование в 8.2 сильно отличается?
35 Fragster
 
гуру
19.03.12
17:17
(33) ну давайте, гнобите меня :(
36 Fragster
 
гуру
19.03.12
17:17
гнобите меня полностью
37 Живой Ископаемый
 
19.03.12
17:21
2(34) если не для управляемого интерфейса, то сгодиться до последней запятой практически.
38 loonypy
 
19.03.12
17:22
Не, неуправляемый интерфейс уже не в моде.
39 Живой Ископаемый
 
19.03.12
17:23
но у тебя ведь вопрос не по формам?
40 Maxus43
 
19.03.12
17:23
(38) зачет) а что в моде нынче?
41 Maxus43
 
19.03.12
17:24
(40) + а, "неуправляемый", не так прочитал
42 loonypy
 
19.03.12
17:24
Нет, вроде.
43 Ненавижу 1С
 
гуру
19.03.12
17:24
(40) консоль
44 Живой Ископаемый
 
19.03.12
17:24
2(40)ну, управляемый...
45 loonypy
 
19.03.12
17:27
так я про управляемый написал.  Как раз внутренняя кухня интересует. Тогда и 8.1 пойдет?

Напоследок: значит все эти параметры, о которых я спрашивал относятся к механизмам самой платформы?
46 Maxus43
 
19.03.12
17:29
(45) да, и заполняются они автоматически платформой, некоторые можно менять.
47 qwerty09
 
19.03.12
17:34
(8) поправьте если я не прав, но я бы сказал что ОбработкаПроведения() - метод класса (коим у нас является Документ), а Отказ/Режим - аргументы этого метода и не более...
48 Ахиллес
 
19.03.12
17:38
(47) Хоть горшком назови. 1С вот придумало свои названия и её не парит, как ты это будешь называть.
49 Maxus43
 
19.03.12
17:39
(47) если метаданные - Классы, что впринципе логично то да, так же думаю)
50 Ахиллес
 
19.03.12
17:41
1С постаралось убрать параллели с другими ЯП вводя собственные названия, что бы такие, как (0) не забивали себе мозги всякой ерундой, а тратили время на изучение предметной области и учета.
51 loonypy
 
19.03.12
17:46
Вопросов нет, большое спасибо за разъяснения. Тема исчерпана.

>> не забивали себе мозги
Уже поздно:(
p.s.
>>Отказ/Режим - аргументы этого метода и не более...
"Отказ/Режим - аргументы этого метода" - нормально звучит, по ООП.
"Отказ/Режим - аргументы этого метода [b]и не более[/b]..." - переклинивает. Аргументы все равно должны откуда-то поступать: либо это переменные, либо какие-либо объекты\структуры. Поэтому тему и создал, чтобы понять - откуда. Оказалось - от платформы.
52 Ахиллес
 
19.03.12
17:47
Автомеханика задолбало каждый день отмываться от машинного масла и он решил стать программистом. Преподаватель рассказывает ему о массивах, классах, а он пытается найти классы в привычном ему устройстве автомобиля. Провести параллели между массивом и тормозными колодками. Нафейхоа? Хочешь понять 1С - понимай её такую, как она есть, а не через сравнение со строением инфузории туфельки.
53 qwerty09
 
19.03.12
18:06
(50) ну не то что бы прям "убрали параллели" - они просто сделали такой себе "фреймворк", дабы упростить жизнь программистам, что впринципе, им удалось...
(52) некорректное сравнение! по-моему, ТС все правильно делает - важно понимать почему оно ТАК работает и откуда что берется...
54 Ахиллес
 
19.03.12
18:24
(53) Это безусловно будет полезно если бух попросит ТС помощи с закрытием 20 счета например, ага.
ТС пошел по ложному пути, не пытается понять 1С, а пытается понять через сравнение со своим прежним багажом знаний о других ЯП. Вот нету в 1С классов. Нету и всё. Чё теперь идти вешаться? Гораздо продуктивнее просто почитать лишний раз синтаксис помощника.
55 qwerty09
 
19.03.12
18:59
(54) Никто не отменяет необходимости знания предметной области, но не о том же речь щас... Это поможет ему быстрее вникнуть и начать работать, не изобретая пятиколесные велосипеды. Пусть даже нет классов, но есть их подобие - Документы, Справочники, Отчеты, etc...пусть это не совсем тот класс что в ООП и его нельзя унаследовать, пусть нельзя перегружать его методы, но фактически это тоже "класс", который имеет свои методы, которым ты устанавливаешь модификаторы доступа (public, private), свойства, изменять которые ты можешь только при создании экземпляра класса (он же Объект), статические методы (из модуля менеджера), которые ты можешь вызывать не создавая экземпляра класса, а просто обратившись к нему "через точку"... Да, 1С очень специфическая, но это не значит что у нее нет прям ничего общего с другими языками программирования...ТС идет правильным путем.
56 experimentator76
 
19.03.12
21:54
имхо
Отказ - это свойство\переменная сеанса в глобальном контексте
определено в начале сеанса и меняется при последовательных операциях над объектом
доступно при передачи в обработчик операции в виде параметра
57 experimentator76
 
19.03.12
22:03
опоздал?
58 loonypy
 
20.03.12
09:47
Ахиллес,
>>Это безусловно будет полезно если бух попросит ТС помощи с закрытием 20 счета например, ага.
До этого тоже доберусь, просто за годы учебы мозг сильно повернулся в сторону программирования, поэтому каждый раз, когда нужно изучать какую-либо программную систему, против воли начинаю с ее архитектуры. С парусом такая же фигня была. Может, если бы на экономиста учился, то только предметикой занимался.

>>опоздал?
нет. Похоже еще вопрос. Например, приходная накладная. Одновременно ведь можно несколько накладных вводить. Тогда на каждую обработку создаются свои Отказ\Режим?
59 Ненавижу 1С
 
гуру
20.03.12
09:50
(48) 1С много чего заново "перепридумало"
показывает общую картину в их лечебнице
60 loonypy
 
20.03.12
10:01
Хотя нет, я кажется опять ошибаюсь.
Несколько приходных накладных -> несколько обработок проведения со своими установленными Отказ\Режим. Но! Все эти обработки реализуются одним и тем же кодом, т.е. если в процедуре выставлен режим исключительный, то он будет для всех одновременно создаваемых накладных - платформа сама значения Отказ\Режим не меняет.
61 1с-кин
 
20.03.12
14:01
Где вы классы нашли в 1С? хоть один назовите.
Чем и страшна 1с - нет ни каких классов и ООП, а есть гигансткая набор-свалка объектов, которые свалены в одну кучу, никак между собой не взимодействуют и не пересекаются (типовые наследуемые методы, свойства - забудьте: если 1с "забыла" прописать чего-нибудь, объект так и останется урезанным), и если нужно что-то еще - жди, когда 1с навалит новые объекты...