Имя: Пароль:
1C
1С v8
УФ. Почему экспортные процедуры модуля объекта больше недоступны?
0 Stim
 
16.10.12
15:45
сабж. ни из клиента, ни из сервера нельзя выполнить экспортную процедуру или функцию модуля объекта из его управляемой формы. Почему разработчики так сделали? с какой целью?
зачем сейчас нужно переносить все процедуры из модуля объекта в модуль менеджера объекта? да еще и объект туда передавать
1 vmv
 
16.10.12
15:47
просто стаду ленивых и жадных в принудительном порядке намекают, что нужно перестать г-кодить и вернуться к объектой классике.

1С лелеет надежду создать ооп-систему и уже сейчас идет экспансия этой технологии
2 Stim
 
16.10.12
15:50
(1) ну и зря. для тех прикладных направлений, в которых работает 1с ООП особо не пригодится
3 Defender aka LINN
 
16.10.12
15:52
Вас, одинэснегов, хрен разберешь. Нет ООП - плохо, есть ООП - плохо... Когда ж вам хорошо-то будет?
4 vmv
 
16.10.12
15:52
+(1) как только появились менеджеры в справочниках и пр. - я все выборки относительно этого объекта пренес в них.

пример, в каждой типовой есть метод проверки уникальнисти ИНН контргента, который сидел и сидит в общих модулях, а на фига их раздувать(общие модули) спецефичными относительно таблицы БД методами, если логичнее и проще написать

Если Справочники.Контрегнты.ИннУникален(СсылкаКонтрагента)
Вовзрат "няха";
ИначеЕсли ОбщегоНазначенияСервер.ИннУникален
Вовзрат "ты тупой и жадный";
(СсылкаКонтрагента)
КонецЕсли;
Тогда
5 vmv
 
16.10.12
15:53
(2) -> (4)
6 Stim
 
16.10.12
15:54
(3) нам хорошо, когда все работает и не надо ничего переделывать
7 Stim
 
16.10.12
15:54
+ математические модели на 1С не пишут. а товарно-денежно-учетные и без ООП прекрасно реализуются
8 ProProg
 
16.10.12
15:55
вот балбес то.
Чтобы их вызывать теперь надо через сам объект обращаться.
9 ProProg
 
16.10.12
15:56
ОбработкаОбьект = РеквизитФормыВЗначение("Объект");

ОбработкаОбъект.ЭкспортнаяПроцедураМодуляТраляляляляля();
10 Stim
 
16.10.12
15:56
(8) чукча писатель?
я не спрашиваю, что надо делать. Я спрашиваю - почему
11 acsent
 
16.10.12
15:56
РезвизитФормыВЗначение
12 acsent
 
16.10.12
15:57
(10) потому что на форме нет объекта
13 acsent
 
16.10.12
15:57
есть только "проекция" объекта
14 ProProg
 
16.10.12
15:57
(10) шо почему? почему надо писать лишнюю строку?
15 vmv
 
16.10.12
15:58
(10) для локализации собственных, написанных тобой, методов относительно таблицы БД в ее локальном контесте, как это принято в любой современной системе программирования или ты тока с тайги вышел?
16 ProProg
 
16.10.12
15:59
Вопрос фигня.
Вот есть гораздо интереснее))))
Один объект. Несколько форм.
какого уя приходится между формами полностью перебрасывать данные. Тк. если из одной формы открываем другую - то данных уже нету...
Вот вот это реально писцец.
17 YF
 
16.10.12
15:59
(10) Потому что  объекты на клиенте более недоступны
18 vmv
 
16.10.12
16:01
(16) для этого нужен полиформизм - один из трех слонов опп, но тебе пока рано об этом думать)
19 Stim
 
16.10.12
16:02
(13) объект проецируется на форму, да. на клиенте он обрабатывается, отдается на сервер. вот на сервере можно было бы и разрешить прямой вызов обработчиков модуля объекта
20 vmv
 
16.10.12
16:05
(19) на клиенте образ объекта, а не сам объект - хватит чушь нести, как истеричка возле сгоревшего омлета
21 vmv
 
16.10.12
16:06
+(20) и на сервере в УФ тоже образ объекта типа "ДанныеФормыСтруктура"
22 Stim
 
16.10.12
16:06
(20) на клиенте - да. но я говорю про сервер.
23 ProProg
 
16.10.12
16:06
(20) причем тут модули? сам не неси чущь.
Например я хочу в модули поместить процедурки просто для того чтобы защитить модуль. форма то не защищается.
И хочу их вызывать.
24 vmv
 
16.10.12
16:07
(22) давай честно и открыто скажем - ты просто тормоз, ну и чуть-чуть истеричка. Надо это признать и начать искоренять эту напасть в себе, я лично в тебя верю
25 Ахиллес
 
16.10.12
16:08
(4) Дибильный пример. ИНН есть не только в справочнике контрагентов, но и в справочнике организаций. И никто мне не запретит добавить ещё справочников где будет ИНН использоваться. Теперь дублировать эту процедуру в каждом справочнике вместо того, что бы в одном модуле её один раз прописать?
26 vmv
 
16.10.12
16:09
(23) вырази свою мысль на профессиональном языке, как баба кипятишься чес-слово)
27 1Страх
 
16.10.12
16:09
потому что в 1С сидят дятлы архитекторы
28 Stim
 
16.10.12
16:10
(24) если ты не готов к нормальному адекватному диалогу - признай это, будь мужиком. в твои-то годы это давно пора сделать.
29 vmv
 
16.10.12
16:10
(25) конечно дублировать, тем более что проверка уникальности для каждого своя, если речь вести о госклассификации, а плодить г-код с условными кейсами и шаблонами запросов которые хрен откроешь в конструкторе - много ума не надо
30 acsent
 
16.10.12
16:12
1с просто решила не разворачивать автоматом проекцию на сервере в объект, ибо это затратная процедура и требуется далеко не всегда
31 acsent
 
16.10.12
16:13
(27) я думаю уж поумнее тебя
32 Stim
 
16.10.12
16:13
(21) и что? это полноценная "версия" объекта, со всеми значениями,реквизитами, реквизитами реквизитов и пр.
33 ProProg
 
16.10.12
16:13
(30) +100 и все 1Сники на этом кучу денег будут зарабатывать тк это лишние трудозатраты.
34 1Страх
 
16.10.12
16:14
(31) откуда знаешь?
35 Stim
 
16.10.12
16:14
(33) это не всегда хорошо
36 kiruha
 
16.10.12
16:14
(0)
Вызывай из общего модуля
37 1Страх
 
16.10.12
16:16
(1) ООП тут каким боком?
38 Stim
 
16.10.12
16:16
(36) ну это вообще никуда не годится. десяток вложенных процедур из одной строки - это только разработчики с их проектным взглядом так могут
39 ProProg
 
16.10.12
16:17
Короче не парься. в 1С очень много вопросов на которые не будет ответов.
40 ProProg
 
16.10.12
16:18
делай так как есть и как можно.
Выйдет девятка, потом десятка. - там будет все по новому. и тоже будут вопросы без ответов.
41 kiruha
 
16.10.12
16:21
(38)
Смотрю сейчас форму закрытия Заказ поставщику


           // Установка статуса документа
           Если Не Объект.УстановитьСтатус("Закрыт", Новый Структура("ОтменаНеотработанныхСтрок", ПричинаОтмены)) Тогда
               Продолжить;
           КонецЕсли;

потом модуль объекта
Функция УстановитьСтатус(НовыйСтатус, ДополнительныеПараметры) Экспорт


ЧЯДНеТак ?
42 5 Элемент
 
16.10.12
16:22
(0) он что серьезно?
43 acsent
 
16.10.12
16:22
а перенос из модуля объекта в модуль менеджера - это верное направление
44 Stim
 
16.10.12
16:25
(41) а я смотрю типовую БП3.0

&НаКлиенте
Процедура ВидОперацииПриИзменении(Элемент)

   ВидОперацииПриИзмененииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
   
   ДатаПриИзмененииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)

   ОрганизацияПриИзмененииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура СкладПриИзменении(Элемент)

   СкладПриИзмененииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура КонтрагентПриИзменении()

   КонтрагентПриИзмененииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура ДоговорКонтрагентаПриИзменении(Элемент)

   ДоговорКонтрагентаПриИзмененииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура СпособЗачетаАвансовПриИзменении(Элемент)

   СпособЗачетаАвансовПриИзмененииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура ГрузополучательПриИзменении(Элемент)
   
   ГрузополучательПриИзмененииНаСервере();
   
КонецПроцедуры
45 ProProg
 
16.10.12
16:25
(41) автор недоволен что надо писать Объект.
46 5 Элемент
 
16.10.12
16:26
(43) надо несколько модулей менеджера. для поддержки проще.
47 kiruha
 
16.10.12
16:38
(0)
Т.е. проблема - писать в серверной процедуре модуля формы - Объект.ВызовМоейЭкспортнойФункцииОбъекта() ?
48 Stim
 
16.10.12
16:38
(41) не хочет она в толстом клиенте так работать. ни на сервере ни на клиенте
49 1Страх
 
16.10.12
16:38
(44) доступно и всырьес
50 Stim
 
16.10.12
16:42
(47) изобрази это здесь:  http://zalil.ru/33858686
51 acsent
 
16.10.12
16:44
(44) скажи спасибо что тебе форму не приходится с клиента на сервер вручную переносить
52 Stim
 
16.10.12
16:46
(51) спасибо :)
53 Stim
 
16.10.12
16:47
+ имхо - 1С надо двигаться в сторону компоновщиков,конструкторов и прочих облегчающих работу помощников. Это и будет ООП, адаптированное под прикладную область
54 acsent
 
16.10.12
16:48
(53) как ты представляешь себе написать например РАУЗ на "компоновщике"
55 Stim
 
16.10.12
16:49
(54) с раузом не сталкивался, хз. но партионный учет можно было бы запилить компоновщиком с кучей галочек и настроек. ведь там единый принцип практически во всех типовых
56 acsent
 
16.10.12
16:54
(55) типа такого
http://habrahabr.ru/post/145067/
57 Stim
 
16.10.12
16:56
(56) класс :)
ребенок появится -  будет играть)
58 GANR
 
16.10.12
17:02
(0) И правильно сделали... Я вообще за появление ООП в рамках 1С. Сделаю базовый класс для объекта "Форма", например - перестану однотипный код обращений к общим модулям в модулях форм объектов плодить. И документы можно будет в иерархию классов выстроить и не е...ся с настройкой регистрации по регистрам каждого дока индивидуально, например.
59 GLazNik
 
16.10.12
17:10
(56) а че... прикольно... но как начнешь делать что-то серьезное то сразу возникает ограниченность всяких конструкторов
60 kiruha
 
16.10.12
17:10
(50)
Через общий модуль получилось только
Можно сделать универсальную
ЗапускМетодаОбъекта(МойОбъект,ИмяМетода, СтруктураПараметров)
61 kiruha
 
16.10.12
17:13
А нет прошло и на форме


&НаСервере
Процедура ВыполнитьКомандуСервер()
   //    ТекстПроверки=Объект.МойТест();
   //    ТекстПроверки=    ОбщийМодуль1.ТестоваяПроцедура();
       ТекстПроверки=Документы.Документ1.СоздатьДокумент().МойТест();
       МоеСообщение= Новый СообщениеПользователю;
       МоеСообщение.Текст=ТекстПроверки;
       МоеСообщение.Сообщить();

КонецПроцедуры
62 Stim
 
16.10.12
17:18
(61) ну да, прикольно. создатьДокумент(), чтобы достучаться до модуля объекта)
63 kiruha
 
16.10.12
17:18
&НаСервере
Процедура ВыполнитьКомандуСервер()
        ТекстПроверки=Объект.Ссылка.ПолучитьОбъект().МойТест();
      МоеСообщение= Новый СообщениеПользователю;
      МоеСообщение.Текст=ТекстПроверки;
      МоеСообщение.Сообщить();

КонецПроцедуры
64 kiruha
 
16.10.12
17:29
Еще усовершенствование

&НаСервере
Процедура ВыполнитьКомандуСервер()
      ИмяТипа =  "ДокументОбъект.Документ1" ;
      ОбъектЗначение = ДанныеФормыВЗначение(Объект, Тип(ИмяТипа));
      ТекстПроверки=ОбъектЗначение.МойТест();
       
       
      МоеСообщение= Новый СообщениеПользователю;
      МоеСообщение.Текст=ТекстПроверки;
      МоеСообщение.Сообщить();

КонецПроцедуры
65 Mafoni
 
16.10.12
17:38
если расположить функцию / процедуру в модуле менеджера можно и не создавать объект а обращатся на прямую Документы.МойДокумент.МояФункция
66 Stim
 
16.10.12
17:38
(65) спасибо, кэп
67 Stim
 
16.10.12
17:38
+ ты как всегда на страже
68 kiruha
 
16.10.12
17:39
(64)+
Т.е. экспортные никуда не делись, просто Объект формы не то же самое что документ объект
69 Stim
 
16.10.12
17:46
(68) а зачем ты тип задаешь? и без него все прекрасно работает
70 kiruha
 
16.10.12
17:47
(69)
По привычке - в типовой так
71 kiruha
 
16.10.12
17:52
Лучше от греха - задавать(в спраке обяз поле)
ДанныеФормыВЗначение (FormDataToValue)
Синтаксис:

ДанныеФормыВЗначение(<Объект>, <Тип>)
Параметры:

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.
Данные формы.
<Тип> (обязательный)

Тип: Тип.
Тип значения, получаемого из данных формы.
Возвращаемое значение:

Тип: Произвольный.

Описание:

Преобразует данные формы в объект прикладного типа.

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

Сервер, толстый клиент.