В модуле объекта, в управляемой форме, есть процедура, которую мне необходимо использовать в модуле форме. Но вызвать ее никак не получается. Можно, конечно, скопировать ее в модуль формы, но ... зачем ..., если она есть в модуле объекта. При вызове пишет что "..нет такой процедуры или функции".
---
Сначала надо получить объект.
 ДокументОбъект = РеквизитФормыВЗначение("Объект");
 ДокументОбъект.ПроцедураМодуляОбъектаЭкспортная();
---
Сначала надо получить объект.
 ДокументОбъект = РеквизитФормыВЗначение("Объект");
 ДокументОбъект.ПроцедураМодуляОбъектаЭкспортная();
---
Невероятно, но все получилось!
---
Nickon,
так у вас что - и объекты разные?
---
Nickon, Невероятно, но все получилось!
Что невероятного то?
---
Спасибо!

(10) Дело в том, что в контексте модуля формы реквизит Объект является типом ДанныеФормыСтруктура, такой себе облегчённый вариант для работы с объектом формы. Платформа выполняет имитацию исходных объектов с помощью ДанныхФормы, которые имитируют только структуру исходных объектов.

При этом методы исходных объектов недоступны, как и модуль объекта, так как Объект тоже имитируется через ДанныеФормы. Для того чтобы обратиться к модулю объекта или к методам исходных объектов, необходимо выполнить преобразование объекта из данных формы в исходный объект. Поэтому и нужно сделать, то что написано выше.

Данная операция может быть выполнена только на сервере. После чего с помощью метода формы РеквизитФормыВЗначение(), как показано выше или с помощью глобальной команды ДанныеФормыВЗначение() можно преобразовать ДанныеФормы в исходный объект.
---
Ну ты и некрофил...
---
А что тема клиент-серверного взаимодействия управляемых форм в 1C уже неактуальна?
---
Ну а что, кто-нибудь из поиска найдет тему, почитает, научится чему-нибудь, что плохого?
---
И ты тоже некрофил.
---
Спасибо! Помогло.
---
Спасибо.
---
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.ПроцедураМодуляОбъектаЭкспортная();
спасибо, работает!
---
А если это в одном документе?
---
Nickon, вопрос не ясен.
---
DevilOTS
Я так понял, что ты имеешь ввиду вообще с различного рода модулей объектов?
---
Вызов должен выполняться на сервере.
---
Да, вызывается на сервере, но это не помогает.
---
asved.ru,
правильно, поставьте компиляцию процедуры модуля объекта НаСервере.
---
Ответ неверный. Модуль объекта и так исполняется на сервере, а директивы компиляции там не действуют.

(6) Сама Процедура в модуле объекта Экспорт'ная?
---
Да, экспортная.
Все с вариантом DevilOTS получилось. Спасибо ему за это!
А то звонил франчам, по этой проблеме, но они сами не знают как решить эту проблему. Просили если найду выход позвонить им. );
Спасибо всем за участие!
---
Пожалуйста.
---
Если у Вас разные объект например два документа и надо в форму одного документы вызвать процедуру из другого, то в этом случаи надо процедуру помещать в модуль менеджера и вызывать ее как документы.названиедокумента.названиепроцедура. Соответственно все вызовы на сервере.
---
Такой же вопрос возник по Отчету (а не по документу). Выяснил что нужно параметром указывать "Отчет".

Отчет = РеквизитФормыВЗначение("Отчет");
---
Сообщение было скрыто модератором.
---
13-ый ответ используется в типовых решениях от 1С. Думаю так правильнее делать
---
да, а как быть если это внешняя обработка?там нет такого "поставьте компиляцию процедуры модуля объекта НаСервере." как быть?
---
del_del,
Модуль формы:
&НаКлиенте
Процедура Прочитать(Команда)
 Прочитать_НаСервере();
КонецПроцедуры

&НаСервере
Процедура Прочитать_НаСервере()
 РеквизитФормыВЗначение("Объект").ЗаполнитьТЧ();
КонецПроцедуры

Модуль объекта (внешняя обработка):
Процедура ЗаполнитьТЧ() Экспорт
 // твой код
КонецПроцедуры
---
Отличная тема!
Всё в сборе.
Те же проблемы были;))
---
Возможна ли обратная операция? Вызвать процедуру формы из модуля документа?
---
Геннадьевич, думаю что нет!!! И ещё раз нет!!!
У вас обращение к БД исполняются на сервере.
Соответственно Клиент делает запрос на Сервер и возвращает данные на клиента.
для такого дела ставят флажки в серверных модулях, где они компилируются: Сервер и ВызовСервера(Для обращения с клиентского компа)
Обратите внимание, что нет в свойствах модулей такого флага, как вызов клиента.
Поучите лекции Евгения Гилёва, даже там вам скажут что на клиенте можно использовать методы обращения на сервер, а вот с сервера вызывать метод обращения на клиент - ну никак))))
---
Bukaska, Спасибо за развернутый ответ. Лекции обязательно посмотрю.
---
Вы уверены что с сервера нельзя уйти на клиента ;)
---
Уверены! На какой клиент должен уйти вызов с сервера? Возможен только возврат после вызова сервера с клиента.
---
https://infostart.ru/public/787245/
---
Почему тогда Сообщить() на сервере возвращает строку на клиент?
---
А теперь вопрос посложнее, господа эксперты: как вызвать процедуру модуля обработки из формы этой обработки из безконтекстной процедуры (чтобы не таскать на сервер всю форму)? Уверен - никак. И модуля менеджера у внешней обработки не существует. Остается только располагать процедуру в форме? Тоже некрасиво. Подскажите, как сделать красиво?
---
оказалось, что и из процедуры НаСервере в модуле формы не всегда возможно вызвать функции модуля объекта - начинает сбоить РеквизитФормыВЗначение, ошибка

```1c
    "Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
    ОбъектНаСервере = РеквизитФормыВЗначение("Объект");
    по причине:
    Тип не определен ''512175c6-8746-4aab-865b-1560c0f52421''".
```

Т.е., например, при переходе от ПриСозданииНаСервере, где все процедуры модуля объекта видятся, к следующей процедуре НаСервере - процедура перестает "видеть" главный свой реквизит формы Объект, и уже не находит его (ссылка есть, а найти по ней - не может).
В общем, полный мрак и внешние обработки )
---
Для вызова такой процедуры необходимо прежде всего иметь сам объект документа, но прикладные объекты существуют только на сервере. На клиенте их нет. Поэтому поступим следующим образом.

Выполним контекстный серверный вызов. На сервере преобразуем основной реквизит формы в прикладной объект, выполним экспортируемую функцию этого объекта и преобразуем объект обратно в основной реквизит формы.

http://v8.1c.ru/metod/faq2/answer.jsp?id=648
---
Для внешней обработки делаю так:
1. завожу реквизит обработки "Модуль"
2. в модуле объекта определяю экспортную процедуру/функцию "Процедура ПроцЭкспорт Экспорт ..."
3. в теле модуля объекта делаю присваивание: "Модуль = Объект;"
4. в модуле формы делаю вызов "Объект.Модуль.ПроцЭкспорт();"
все работает

Подскажите, кто знает, чем это хуже или лучше чем описано у 1с http://v8.1c.ru/metod/faq2/answer.jsp?id=648 из (28 от aleksdiez)
---
slawa, интересный способ, не знал о нем. А на производительности не сказывается?
---
slawa, А для внешнего отчета это не работает?
В 29 написано, что делал для внеш обработки. Но у меня не получилось. Не понятно реквизит обработки "Модуль" какого типа? и п.3 не совсем понял.

Может у кого-то получилось?

Что-то с отчетом совсем печально получается. Даже если его в конфигурацию засунуть, то всё равно не работает.
С документом все прошло удачно.

Как же в отчете сделать так, что бы заработало?

Все работает и во внешнем тоже - не заметил директиву #Если Клиент.
---
Не понятно реквизит обработки "Модуль" какого типа? Когда речь идти о ссылках (любых) - в УФ 1С всегда используется тип "Произвольный".
Либо - ставить конкретный тип документов/справочников/объектов, что неприемлемо для внешних обработок.
---
Подскажите, кто знает, чем это хуже или лучшеА я вам объясню сейчас, если в 1С опять не наделали вместе с явными "перебросками" РеквизитФормыВЗначение - еще и неявное обновление/чтение объекта на форме с/через помощью обращения к этому самому объекту через реквизит (а все может быть :) ).
Ведь зачем весь этот огород городить - вызывать из модуля формы функции/процедуры модуля объекта (МО)? А так мы, с помощью МО, и за отсутствием модуля менеджера (ММ) - имитируем вызов аналогичных функций из ММ.
А зачем вообще делать функции в модуле менеджера? Они позволяют работать/обращаться к с объекту из Формы, и менять данные.
Так вот, все вот эти бесконечные "РеквизитФормыВЗначение" и "ЗначениеВРеквизитФормы" - они ж не зря используются тут. Происходит чтение актуальных данных объекта, изменение через процедуру МО, а потом - загрузка измененного объекта на форму (при конвертации в реквизит формы), т.е. актуализация для формы данных объекта.
А это как раз именно, то, что и нужно - выполняется имитация функции модуля менеджера.
А вот ваш вариант - лишь получает и выполняет функции, меняя объект, а данные объекта "на форме" - не меняются в соответствии с вашими актуальными изменениями объекта, которые, вроде бы, должны последовать после вызовов и обработки объекта из модуля формы (а иначе зачем все это) - что происходит при обратном вызове "ЗначениеВРеквизитФормы".
Вы ж только один раз читаете Объект и актуализируете данные - в самом начале. И все.
Но это все верно лишь при условии - что при обращении к реквизиту, содержащему ссылку на объект, данные объекта не "обновляются" на форме.
3. в теле модуля объекта делаю присваивание: "Модуль = Объект;" Присвоение делается не в теле модуля объекта, а в модуле формы, в области автовыполнения кода (это в самом конце модуля).
Или тогда надо делать это присвоение в каждой функции, использующей реквизит "Модуль".
А для УФ в МО реквизит "Объект" формы вы не увидите никак, и, соответственно, не сможете его присвоить реквизиту обработки "Модуль" )
---
Модуль = Объект;

Здравствуйте! По этому пункту непонятно, пишу в модуле объекта, в самом низу, ругается "Переменная не определена (Объект)"
(29)
---
Вообще 1С платформа поступает не гуманно, все эти
```1c
    РеквизитФормыВЗначение("Объект")
```
 выглядят убого, они не могли автоматически неявно транслировать код между клиентом и сервером?
---
naf2000, режим обычного приложения так и делает.
---
у меня тоже в модуле не видит из формы !
Уже вторые сутки ничего не могу сделать.
1С:Предприятие 8.3 (8.3.6.2152) платформа
УПП 1.3 то что вы пишете - не работает там вообще нет управляемых форм ! как быть ?
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Вопрос: а как обновить форму УФ из модуля объекта?
Также РеквизитФормыВЗначение() использовать, а в процеддуре формы метод Прочитать() ??
---
Всё, что находится в модуле объекта, относится к серверу. Форму на сервере вы не обновите.
---
а надо. И форму с сервера обновить, и данные достать, которые безответственно выдавили на сервер.
А так - это вообще ни-о-чем, а не программирование.
---
Блин...как все просто.
---
Добрый день.
Подскажите пожалуйста, такой же вопрос:
во внешней обработке хочу вызвать экспортную процедуру с параметрами Автозаполнение(ПостроительЗапроса = Неопределено,ТабЛС = Неопределено)
из модуля формы документа КУ_НачислениеКоммунальныхУслуг.
Документы новые, только создаются. Табличная часть- заполняется с помощью процедуры Автозаполнение.
Док=Документы.КУ_НачислениеКоммунальныхУслуг.СоздатьДокумент();

ОбъектНачислениеКомУслуг =ДанныеФормыВЗначение(Док,Тип("ДокументОбъект.КУ_НачислениеКоммунальныхУслуг"));
ОбъектНачислениеКомУслуг.Автозаполнение(ПараметрыОтбораЛицевыхСчетов,ЗаполнитьСписком);
ЗначениеВДанныеФормы(ОбъектНачислениеКомУслуг,Док);

Пока Выборка.СледующийПоЗначениюПоля("Здание") Цикл

и как мне дальше обратиться к полученным значения этой процедуры и записать в тч документа?
 строкаТч = Док.ВидыНачислений.Добавить();//
 СтрокаТЧ.ЛицевойСчет = ?
 строкаТч.помещение = ?
 СтрокаТЧ.ВидУслуги = ?

Благодарю за помощь :)
---
Пока Выборка.СледующийПоЗначениюПоля("Здание") Цикл

и как мне дальше обратиться к полученным значения этой процедуры и записать в тч документа?
Что-то не понял ваши намерений. Если у вас в модуле объекта всё заполняется, что вы собираетесь еще на форме заполнять?
И где у вас инициализируется переменная Выборка? Что-то не увидел...
---
spe1c,

хочу создать программно документы с помощью внешнего отчета.
данные выбираются с помощью запроса во внешнем отчете (выборка- это результат запроса, какие именно создавать документы), а документы хочу заполнить, вызвав из модуля формы документа процедуру. Просто скопировать процедуру в обработку- не вариант, так как частенько меняется алгоритм заполнения документов.
Эти документы бухгалтер создает ежемесячно, поэтому решила немного оптимизировать + разобраться:)
До этого создавала программно документы с помощью отчета, но к сожалению никогда не сталкивалась с вопросом вызова процедуры с параметрами из документа конфигурации. :(
---
Новичок1с, для этого нужно использовать модуль менеджера лучше.
---
Новичок1с, у вас есть внешняя обработка как я понял, и вы программно создаете документы. Вы процедуру модуля документа пытаетесь вызвать из формы обработки?
---
spe1c,

Да, Вы меня верно поняли.
---
Новичок1с, тогда зачем вы пишете это?:

```1c
    ОбъектНачислениеКомУслуг =ДанныеФормыВЗначение(Док,Тип("ДокументОбъект.КУ_НачислениеКоммунальныхУслуг"));
    ОбъектНачислениеКомУслуг.Автозаполнение(ПараметрыОтбораЛицевыхСчетов,ЗаполнитьСписком);
    ЗначениеВДанныеФормы(ОбъектНачислениеКомУслуг,Док);
```

Это нужно если вы обращаетесь к экспортной процедуре объекта из формы самого этого объекта. Например, на форме документа у вас есть реквизит "Объект" - вы его конвертируете в настоящий ДокументОбъект, вызываете через менеджер этого объекта экспортную процедуру, она меняет объект, и вы загружаете измененный объект на форму, конвертируя в реквизит формы. В вашем случае это не нужно, по моему.
---
spe1c,
Благодарю за разъяснение.
Просто начала делать и не знаю, как это реализовать, нашла этот способ...
---
Помогло решение 2. Спасибо.
---
Похожий вопрос: не получается следующее: Нужно из процедуры на сервере в УФ справочника вызвать экспортную функцию модуля документа.
---
Помещать процедуру в модуль менеджера это неправильный вариант так как данная процедура типовая и может изменятся.
---
Помещать процедуру в модуль менеджера это неправильный вариант так как данная процедура типоваяЧаще происходит ровно наоборот - ссылаешься на процедуру в конфе, а она несколько раз уже поменялась, в результате - одни ошибки.
Для внешней обработки пусть уж лучше будет отдельно, но рабочая.
---
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.ПроцедураМодуляОбъекта();