|
Как в Модуле Формы вызвать процедуру из Модуля Объекта? | ☑ | ||
---|---|---|---|---|
0
1cwitch
05.11.14
✎
17:42
|
Есть процедура, написанная в модуле объекта.
Ее необходимо вызвать в определенный момент из модуля формы. Постоянно выдает ошибку, что процедура с указанным именем не определена. |
|||
1
vicof
05.11.14
✎
17:43
|
Сделать ее экспорной
|
|||
2
vicof
05.11.14
✎
17:43
|
экспортной
|
|||
3
Defender aka LINN
05.11.14
✎
17:43
|
(0) Потому что не нужно такое делать. Для этого есть модуль менеджера
|
|||
5
Defender aka LINN
05.11.14
✎
17:44
|
+(3) Или не УФ? Хотя все равно, лучше заранее привыкать.
|
|||
6
1cwitch
05.11.14
✎
17:44
|
Она уже является экспортной.
|
|||
7
Vladal
модератор
05.11.14
✎
17:44
|
(4) Устное предупреждение.
|
|||
8
Krabobor
05.11.14
✎
17:45
|
Документ = РеквизитФормыВЗначение("Объект");
Документ.МояПроцедура(); ЗначениеВРеквизитФормы(Документ,"Объект") |
|||
9
chudishe
05.11.14
✎
17:45
|
(3) Модуль менеджера не для этого.
|
|||
10
1cwitch
05.11.14
✎
17:46
|
Да не знаю изменит это что-то: это обработка.
|
|||
11
Krabobor
05.11.14
✎
17:47
|
(10) нет, не изменит.
|
|||
12
vicof
05.11.14
✎
17:48
|
(7) За 4,5 год на форуме ни разу никто не догадался меня предупреждать о выкладывании фоток девушками. Подозреваю дискриминацию по половым предпочтениям.
|
|||
13
1cwitch
05.11.14
✎
17:49
|
Модуль Объекта
#Если Клиент Тогда Процедура ЗагрузкаВ1СБух(Док,ФорматИмпорта) Экспорт Модуль Формы .... //наклиенте Если Док.Флаг = Истина Тогда ЗагрузкаВ1СБух(Док, Ф); //Проверить при отладке: Возможно не правильное обращение к проц КонецЕсли |
|||
14
vicof
05.11.14
✎
17:51
|
"#Если Клиент Тогда"
и откуда на сервере клиент? |
|||
15
1cwitch
05.11.14
✎
17:52
|
Блин, это с 7.7 осталось.
|
|||
16
vicof
05.11.14
✎
17:53
|
(15) См (8)
|
|||
17
Defender aka LINN
05.11.14
✎
17:56
|
(9) А для чего же?
|
|||
18
Defender aka LINN
05.11.14
✎
17:56
|
(15) #Если Клиент - с 7.7. Серьезно?
|
|||
19
1cwitch
05.11.14
✎
17:56
|
Что такое (15)См (8)?
|
|||
20
1cwitch
05.11.14
✎
17:56
|
Да. Старая обработка.
|
|||
21
1cwitch
05.11.14
✎
17:57
|
+ еще бухгалтерия 2.0
|
|||
22
vicof
05.11.14
✎
17:59
|
(21) Буковки в названии процедуры и при ее вызове проверь. Наверняка, не совпадут.
|
|||
23
chudishe
05.11.14
✎
18:00
|
(17)
2. Модуль менеджера объекта предназначен для размещения "статической" функциональности, которая логически неразрывно связана с объектом метаданных, но не зависит от состояния конкретного экземпляра объекта данных. Это могут быть процедуры и функции: относящиеся не к одному, а сразу к некоторой совокупности объектов. Например, это функции для вывода на печать списка объектов; функции, возвращающие информацию, общую для всех экземпляров объекта метаданных; процедуры обновления данных информационной базы, которые связаны с объектом метаданных; и т.п. которые работают с объектом, записанным в ИБ. В таких функциях входным параметром является ссылка на объект. Например, это функции для получения печатной формы по ссылке на объект, процедуры формирования движений по ссылке на объект и т.п. Для выполнения функций модуля менеджера объекта не должен требоваться экземпляр объекта данных (СправочникОбъект, ДокументОбъект и т.п.). |
|||
24
Господин ПЖ
05.11.14
✎
18:01
|
ловите наркоманов
|
|||
25
chudishe
05.11.14
✎
18:04
|
(23) Проще говоря методы для расширения функционала менеджера объекта, а не просто для вызова процедур общего назначения или процедур для обработки экземпляра объекта. Такие дела.
|
|||
26
1cwitch
05.11.14
✎
18:05
|
Блин, ребят, я только учусь, да и вопрос простой: как вызвать процедуру, находящуюся в модуле объекта, из объекта формы. Просто дайте рыбу и все как это делать. Буду премного благодарна.
vicof, буковки проверяла. И меняла название (благо вызывается она один раз). Не помогло. |
|||
27
Господин ПЖ
05.11.14
✎
18:06
|
>Проще говоря методы для расширения функционала менеджера объекта
щито? сам себя расширяет? ловите его |
|||
28
ОчкарикСлава
05.11.14
✎
18:07
|
(26) в восьмом посте вариант решения.
|
|||
29
herfis
05.11.14
✎
18:08
|
(26) Формальный ответ в (8)
Это для случая, если процедура меняет данные объекта. Если не меняет, тогда переноси в модуль менеджера. |
|||
30
ОчкарикСлава
05.11.14
✎
18:09
|
(26) ты против кошмана подписалась? ;)
|
|||
31
Господин ПЖ
05.11.14
✎
18:09
|
(26) так учись, читая буквари... где сначала учат про упр. приложение и обычное
если оно управляемое то в в (13) написана хрень и делать надо (8), убрав бредни типа "#Если Клиент Тогда" |
|||
32
ОчкарикСлава
05.11.14
✎
18:14
|
И я бы не стал писать док.флаг = истина,
Я бы написал: если док.флаг тогда (Разумеется если он булево) |
|||
33
1cwitch
05.11.14
✎
18:17
|
ОчкарикСлава, да, согласна, но в последствии буду расширять обработку и пользователь будет видеть по факту сколько документов у него загрузилось. Так что оставлю пока так.
|
|||
34
hhhh
05.11.14
✎
18:18
|
(32) а если не булево? Тогда бы
док.флаг = истина? |
|||
35
1cwitch
05.11.14
✎
18:20
|
Господин ПЖ, читать одно, понимать и применять на практике - другое. Но если где-то что-то не понятно важно знать где спросить.
|
|||
36
1cwitch
05.11.14
✎
18:20
|
>>(26) ты против кошмана подписалась? ;)
Фраза не понятна. |
|||
37
ОчкарикСлава
05.11.14
✎
18:21
|
(34) перефразируйте ваш вопрос ;)
|
|||
38
ОчкарикСлава
05.11.14
✎
18:23
|
(36) ты вроде из Видного? Подмосковного?
|
|||
39
1cwitch
05.11.14
✎
18:24
|
Да, вроде.
|
|||
40
ОчкарикСлава
05.11.14
✎
18:29
|
(39) "будки гласности" аникошманные не видела? Пару штук, наблюдаю уже неделю их....
Тут ппишут... vidnoe24.ru сорри за офф |
|||
41
1cwitch
05.11.14
✎
18:31
|
Ошибка отображения типов: Отсутствие для отображения типа 'ДанныеФормыЭлементыКоррекции'
|
|||
42
1cwitch
05.11.14
✎
18:32
|
ОчкарикСлава, не первый раз слышу.
|
|||
43
Господин ПЖ
05.11.14
✎
18:39
|
>читать одно, понимать и применять на практике - другое.
метод научного тыка удлиняет путь в понимании 1с... это уже не 7.7 |
|||
44
Krabobor
05.11.14
✎
18:39
|
//в модуле формы
&НаКлиенте Процедура МояПроцедураКлиент() МояПроцедураСервер(); КонецПроцедуры //все в том же модуле формы &НаСервере Процедура МояПроцедураСервер() ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ОбработкаОбъект.МояПроцедураВМодулеОбъекта(); ЗначениеВРеквизитФормы(ОбработкаОбъект,"Объект") КонецПроцедуры // Процедура в модуле объекта &НаСервере Процедура МояПроцедураВМодулеОбъекта() Экспорт // ... КонецПроцедуры Такая рыба, что рыбее не бывает. |
|||
45
1cwitch
05.11.14
✎
18:47
|
Господин ПЖ, Вы предлагаете заучивать как в школе? Методом 10ти кратных повторений?
|
|||
46
smotritel
05.11.14
✎
18:50
|
(9), (23), (25) типовые посмотри для начала.
и может быть лучше сможешь понять то, что ты процитировал |
|||
47
chudishe
05.11.14
✎
19:38
|
(46) Смотрел. И ни в одной из них не видел методов работающих с одним экземпляром объекта. Просто общих процедур тоже не заметил, все относятся именно к этому... эм... Хотел написать "классу", но у нас же не ООП. К этому виду объектов.
Все экспортные процедуры модуля менеджера так или иначе относятся к расширении функционала менеджера объектов этого вида. Само название этого модуля в терминологии 1с вам ни о чем не говорит, нет? Может у вас есть примеры, где используется не так, как я описываю? |
|||
48
smotritel
05.11.14
✎
20:11
|
(47) видимо уже исходный посыл потерялся.
смотрим всю переписку. что было написано в (0) > Есть процедура [skip]. > Ее необходимо вызвать в определенный момент из модуля формы. в (3) > Потому что не нужно такое делать. Для этого есть модуль менеджера в (9) ваш вывод: > Модуль менеджера не для этого С чего сделан такой вывод? Как следует из приведенной цитаты, что из модуля формы объекта нельзя использовать процедуры из модуля менеджера? 2. какие типовые смотрели, какие документы? нигде не вызываются процедуры модуля менеджера? поищите комментарий // ПРОГРАММНЫЙ ИНТЕРФЕЙС либо #Область ПрограммныйИнтерфейс а про ООП задвигать не надо, цитата из (47) > ... но у нас же не ООП |
|||
49
Адский плющ
05.11.14
✎
22:11
|
Объект и коллекция, его имитирующая, две большие разницы. Для них даже гипотетически трудно представить общий класс, чтобы в нем разместить какие-то функции заполнения, например.
Т.е. в прынцыпе-ООП, такие функции должны размещаться в модуле объекта. Но в 1С оптимальнее делать через модуль менеджера, что есть, конечно, чистой воды утинная типизация. Можно начать с того, что коллекция на форме может тупо не содержать всех полей настоящего объекта. |
|||
50
chudishe
05.11.14
✎
22:12
|
(48) Так как ОПу надо было вызвать процедуру из модуля объекта, то логично предположить, что именно там эта процедура и должна находится - в модуле объекта, скорее всего эта процедура производит некие манипуляции с экземпляром объекта. Но (3) возразил, что для этого, мол, есть модуль менеджера, на что я ему резонно возразил, что модуль менеджера не предназначен для подобных методов.
|
|||
51
chudishe
05.11.14
✎
22:13
|
(50) > возразил ... возразил
Извините, поздно уже, заговариваюсь. |
|||
52
Defender aka LINN
05.11.14
✎
22:56
|
(50) Никакого "резонно" я не заметил.
Если нужна процедура, скажем, пересчета строки ТЧ, которая уникальна для данного документа и нигде более не используется, ее логично разместить в модуле менеджера, дабы не преобразовывать данные формы в объект и обратно, т.к. это таки разные вещи. Да и вообще, преобразование данных формы в объект и обратно - это невыразимый ужос и пипец, которым стоит пользоваться только в случае крайней необходимости. |
|||
53
Адский плющ
05.11.14
✎
22:58
|
Модуль менеджера (читай патриотизм) последнее пристанище для уникальной процедуры пересчета строки (читай негодяя)...
|
|||
54
Ненавижу 1С
гуру
05.11.14
✎
23:27
|
вообще говоря неясно
и никто норм не объяснил про УФ: почему 1С запретила напрямую обращаться к модулю объекта из модуля формы на клиенте (да и на сервере тоже только как (8)) |
|||
55
Vladal
05.11.14
✎
23:32
|
(32), (34)
А если не булево, то в условии будет проверка на пустое значение: Если Док.Контрагент Тогда Если Док.Флаг Тогда |
|||
56
hhhh
06.11.14
✎
09:10
|
(55) Если Док.Флаг Тогда
здесь отсутствует проверка на Неопределено и на Null. То есть дополнительно всякой херней придется заниматься. А Если Док.Флаг = Истина Тогда проверяет только, было присваивание в истину или не было, что и нужно в 95% случаев. То есть программе по барабану, Док.Флаг = Неопределено или Ложь. Тогда применяем этот вариант. |
|||
57
Ненавижу 1С
гуру
06.11.14
✎
09:19
|
(56) 1С он такой))
|
|||
58
Ненавижу 1С
гуру
06.11.14
✎
09:25
|
(56) в C#:
bool? flag = true; if (flag.GetValueOrDefault()) { //... } |
|||
59
chudishe
06.11.14
✎
09:46
|
(52) > Да и вообще, преобразование данных формы в объект и обратно - это невыразимый фильтр и пипец, которым стоит пользоваться только в случае крайней необходимости.
Вы это сами так решили, или вам кто-то подсказал? Может замеры производительности проводили? Я так понимаю именно из этого вашего осознания строится вывод, что надо теперь вместо модуля объекта использовать модуль менеджера, да? |
|||
60
Defender aka LINN
07.11.14
✎
11:19
|
(59) 1. На создание экземпляра объекта и обратное преобразование тратится время.
2. После обратного преобразования нужно заново заполнять реквизиты формы, добавленные в объект - если добавил колонку с остатком, к примеру, в табличную часть - после преобразования она очистится. В модуле ОБЪЕКТА должны быть только те процедуры, которые использует ОБЪЕКТ. В управляемой форме у вас объекта нет. |
|||
61
chudishe
07.11.14
✎
12:37
|
(60) Ясно. Замер производительности стало быть вы не проводили.
> 1. На создание экземпляра объекта и обратное преобразование тратится время. > 2. После обратного преобразования нужно заново заполнять реквизиты формы, добавленные в объект - если добавил колонку с остатком, к примеру, в табличную часть - после преобразования она очистится. Вы разработчик платформы, чтобы знать такие интимные подробности? Откуда вам знать как и что платформа делает с вашими объектами? Может экземпляр всегда существует, а структура в форме является всего лишь оберткой поверх него, вы об этом не думали, нет? > В модуле ОБЪЕКТА должны быть только те процедуры, которые использует ОБЪЕКТ. Ну так и размещайте эти методы в модуле объекта, а не используйте модуль менеджера как его замену ПАТАМУШТА ЗЛЫЕ АДИНЭСНИКИ ПЕРДЕЛАЛИ ВСЕ НИ ДАЮТ МИНЕ ИСПОЛЬЗОВАТЬ АБЪЕКТ БЕЗ ДАПАЛНИТЕЛЬНЫХ СТРОЧЕК. |
|||
62
SeiOkami
07.11.14
✎
12:58
|
(52), если процедура работает с конкретным текущим объектов, то она должна быть в модуле объекта. Не всегда есть смысл переписывать её для работы через модуль менеджера, который и не является альтернативой модуля объекта. Это разные модули для разных вещей
|
|||
63
Defender aka LINN
07.11.14
✎
13:11
|
(61) Еще раз: в Управляемой Форме у тебя ОБЪЕКТА нет. Есть данные формы.
|
|||
64
chudishe
07.11.14
✎
13:16
|
(63) Еще раз. Откуда вы знаете как работает платформа? Откуда вы знаете как для платформы выглядят данные формы и каким образом они связаны с экземпляром объекта? Вы разработчик платформы? Нет? Так вот не городите чушь и проведите замер производительности.
|
|||
65
Defender aka LINN
10.11.14
✎
18:10
|
(64) "Откуда вы знаете как работает платформа?" - читаю документацию. каюсь, грешен.
"Откуда вы знаете как для платформы выглядят данные формы и каким образом они связаны с экземпляром объекта?" - имею некоторый скромный опыт работы с 1С. Не ваши впечатляющие 1.5 года, чуть поменьше - 10 лет всего. Хотя и 5 минут бы хватило, чтобы заметить, что, ять, ДокументОбъект и ДаныеФормы, сцуко, РАЗНЫЕ типы данных, дятел. "Так вот не городите чушь и проведите замер производительности" - для дебилов: 2 инструкции на месте ни единой не нуждаются в замере производительности. Возможно, в вашем воображаемом мире не делание ничего займет больше процессорного времени, чем преобразование данных туда-сюда. Возможно. |
|||
66
Fedor-1971
10.11.14
✎
19:07
|
(65) зачем так нервничать уважаемый?
chudishe - мне тут на собеседовании задвинули, что описанный в (8) метод работы самый правильный. Пришлось культурно объяснить, где я видал их понимание распределения процедур/функций по модулям 1С и отправиться на другую фирму. Модуль объекта (в методике 8) - контекстный вызов сервера +конвертация Форма-Объект +работа самой процедуры +конвертация Объект-Форма +возможно, какие-то действия с формой. Модуль менеджера - внеконтекстный вызов сервера для работы процедуры/функции +возможно, какие-то действия с формой Как думаешь что быстрее? Defender aka LINN прав использовать метод (8) нужно в крайнем случае, когда дешевле преобразовать Форма-Объект, чем извращаться с процедурами в менеджере объекта, например, когда требуется возможность сложного преобразования объекта из разных мест конфигурации, но и тут вопрос, возможно, лучше разместить данную процедуру/функцию в общем модуле. |
|||
67
chudishe
11.11.14
✎
10:23
|
(66) Это оптимизаторство уровня получения внутреннего значения функцией ЗначениеВСтрокуВнутр() а работа с этой билебердой. Это нарушение методики работы с объектами, нарушении логики приложения.
Я веду к тому, что возможные затраты на вызов преобразования не стоят того, чтобы нарушать логику работы и парадигму программирования. Я, конечно, не знаю про какую конкретно задачу Вы спрашивали своего собеседуемого, возможно в том конкретном случае Вы были правы. (65) Платформа для вас - черная коробка, и никакая документация не даст вам полного представления о внутреннем её устройстве. > Не ваши впечатляющие 1.5 года Я смотрю уверенность в том, сколько я работаю с 1с у вас такая же как и в знаниях о платформе. PROTIP: То что я зарегистрирован на этом форуме 1.5 года, не значит, что я начал 1с заниматься 1.5 года назад. > РАЗНЫЕ типы данных И чо? > 2 инструкции на месте ни единой не нуждаются в замере производительности Откуда такая уверенность в том, во сколько инструкций скомпилируется ваш код? Ви таки разработчик платформы? Признайте уже. |
|||
68
hhhh
11.11.14
✎
11:10
|
(67) а на методе ПолучитьОбъект() делали замер произвдительности? КАкой-метод тормознее? ПолучитьОбъект() в обычных формах или РеквизитФормыВЗначение() в управляемых?
|
|||
69
Necessitudo
11.11.14
✎
11:22
|
(45) Соседка)
|
|||
70
chudishe
11.11.14
✎
11:24
|
(68) Эти методы делают разную работу. Принципиально разную. Есесно ПолучитьОбъект() должен работать дольше, потому что читает данные из БД.
|
|||
71
Адский плющ
11.11.14
✎
11:39
|
Ну вот, срач продолжается. Слушайте дифендера, он знает как Боря всем тупым одинэсникам приказал делать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |