Имя: Пароль:
1C
1С v8
Как обратиться к функции модуля объекта обработки из общего модуля?
0 VenikUltra Green
 
25.05.22
14:16
Добрый день. Есть обработка, у которой в менеджере объекта прописана функция. К этой функции обращается общий модуль. И тут всё хорошо. Но когда возникает необходимость сохранить обработку как внешнюю (для тестирования и отладки), то модуль менеджера исчезает. Отсюда возникает необходимость перенести функцию из модуля менеджера в модуль объекта. Но тогда при обращении из общего модуля Обработка.НужнаяФункция() пишет, что функция не обнаружена. Хотя слово Экспорт поставили. Есть ли какие-нибудь варианты обойти менеджер объекта и чтобы нужная функция была в модуле объекта?
1 Kassern
 
25.05.22
14:20
беда у вас в понимании работы модулей и обращении к ним.
"Но когда возникает необходимость сохранить обработку как внешнюю" - вот у вас есть файл обработки, валяется на каком-то диске. Откуда модулю конфигурации знать, что там за функция находится?
Если же вы получили предварительно это обработку в модуле, то уже можете обращаться к ее экспортным процедурам/функциям
2 Filin
 
25.05.22
14:25
Что-бы обратиться к процедурам модуля объекта, этот объект нужно создать для начала.  
ОбъектОбработки = Обработки.ВашаОбработка.Создать();
ОбъектОбработки.НужнаяФункция();
3 Dmitry1c
 
25.05.22
14:25
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ОбработкаОбъект.НужнаяФункция();
4 Kassern
 
25.05.22
14:26
5 Kassern
 
25.05.22
14:27
(3) тут скорее всего дело в другом. У него кусок бизнес логики находится в модуле внешней обработки. Он к нему из конфигурации пытается обратиться. Когда обработка внутри конфы, то без проблем, а когда она стала внешней, вот ТС и не знает что делать)
6 Filin
 
25.05.22
14:28
(5) Ну и конечно вызывающему общему модулю то-же придется как-то объяснить, что концепция поменялась :)
7 VenikUltra Green
 
25.05.22
14:29
(1) Не, модулю конфигурации не обязательно знать, где там что валяется на диске каком-то. Обработка выгружается как внешняя только для отладки, а потом ставится обратно. И вот отладка ругается, что нет функции (она пропала вместе с менеджером). Функцию скопировал из менеджера. Доработал её (функцию) и потом нужно обратно её копипастить в менеджер. Можно конечно помнить, что нужно копипастить, но можно однажды забыть про это и в менеджере она останется старой. Гораздо удобнее было бы если бы она была постоянно в модуле объекта, но и общий модуль бы её видел.
8 Kassern
 
25.05.22
14:30
(7) еще бы не обрезалось, у внешней обработки нет модуля менеджера, поэтому он у вас становится пустым)
9 Filin
 
25.05.22
14:31
Ну нет проблем, можно сделать функцию в менеджере, которая просто будет вызывать функцию объекта.
10 VenikUltra Green
 
25.05.22
14:33
(9) Интересно. Можно кусок кода?
11 Filin
 
25.05.22
14:35
(10) Ну код выше. В менеджере создаете объект и вызываете его функцию. Но как правильно заметили уже - менеджер не сохраняется, и об этом придется помнить если загружать измененную обработку полностью.
12 Kassern
 
25.05.22
14:35
(10) вам это что ли надо?))
Обработка=Обработки.ВашаОбработка.Создать();
Обработка.ВашаЭкспортнаяПроцедура();
13 Ryzeman
 
25.05.22
14:36
(0) БСП
    ВнешняяОбработкаСсылка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Моя обработка");  
    ВнешняяОбработкаОбъект = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(ВнешняяОбработкаСсылка );
        Результат = ВнешняяОбрботкаОбъект.МояКласснаяФункция();
14 Kassern
 
25.05.22
14:37
скорее всего ТС пытался вот так Обработки.ВашаОбработка.ЭкспортнаяПроцедура() - на что получал "функция не обнаружена"
15 VenikUltra Green
 
25.05.22
14:38
(11) "и об этом придется помнить если загружать измененную обработку полностью." там обычно через сравнение объединение
(12) если это написать в общем модуле, необходимость в менеджере обработки отпадёт?
16 Kassern
 
25.05.22
14:40
(15) блин еще раз распишите, откуда и что вы хотите вызывать. Вам уже привели примеры как вызвать экспортые функции у внешней обработки и у встроенной в конфу.
17 VenikUltra Green
 
25.05.22
14:44
(16) из общего модуля хочу вызывать функцию из модуля объекта обработки в конфигурации (не внешней).
18 VenikUltra Green
 
25.05.22
14:45
(16) ...дабы избавиться от менеджера
19 Ryzeman
 
25.05.22
14:46
(17) Эммм... Ответ в (12)
20 VenikUltra Green
 
25.05.22
14:46
Я понял. Сейчас попробую.
21 Kassern
 
25.05.22
14:46
(17) ну так вам и написали в (12)
22 Dmitrii
 
гуру
25.05.22
14:46
Создать расширение.
В расширении создать обработку. У такой обработки будет модуль менеджера.
23 Kassern
 
25.05.22
14:47
даже еще раньше написали) в (2)
24 Kassern
 
25.05.22
14:47
(22) только вот зачем это все? Динамически менять бизнес логику через расширения?)
25 VenikUltra Green
 
25.05.22
14:55
как в (12) работает. Спасибо. Одна проблема. При срабатывании Создать() там в этой обработке ещё куча всего ненужного отрабатывает. Ну без этого видимо уже ни как.
26 Filin
 
25.05.22
14:59
(18) Избавиться от менеджера - понятие растяжимое. Тут как минимум два варианта - если есть возможность поменять код в общем модуле, то проще сразу переделать на вызов функции объекта и избавиться от кода в менеджере совсем. Если менять общий модуль нельзя, или вызовов этой функции много в разных модулях, то тогда создаем прокси-функцию в менеджере, которая вызывает в свою очередь функцию объекта.
27 kittystark
 
25.05.22
15:03
а если тоже самое, но только БЕЗ обновления справочников внешних обработок/отчетов
а саму обработку запускать через Файл > Открыть

будет работать, а?
28 Kassern
 
25.05.22
15:07
(27) а разница какая? Вы либо ДД получите из хранилища справочника, либо по пути к внешней обработке
29 Kassern
 
25.05.22
15:08
в БСП же не чудеса происходят, а обычные методы работы с данными
30 kittystark
 
25.05.22
15:16
(28) вот сколько ни пытался БЕЗ обновления справочника и в тонком клиенте на управляемых формах
то открытие ПО ПУТИ ФАЙЛА дает полную хрень - вплоть до того, что добавил новый макет, сохранил файл, открыл,
смотришь в отладчике на метаданные а нового макета НЕТУ
31 Ryzeman
 
25.05.22
15:22
(29) в БСП же не чудеса происходят - спорное утверждение, для подавляющего большинства 1сников)
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.