Имя: Пароль:
1C
1С v8
Аварийное завершение после "РеквизитФормыВЗначение"
0 mwide
 
29.11.13
12:56
Есть управляемая форма отчета. На форму выведена таблица отбора компоновщика настроек.

Возникает необходимость обратиться к процедуре, описанной в модуле формы. Код такой:

&НаКлиенте
Процедура Действие(Команда)
    Действие_сервер();
КонецПроцедуры

&НаСервере
процедура Действие_сервер()
    ЭтотОбъект = РеквизитФормыВЗначение("Отчет");
    ЭтотОбъект.Действие();
    ЗначениеВРеквизитФормы(ЭтотОбъект, "Отчет");
конецПроцедуры

Если теперь попробовать добавить элемент отбора, программа аварийно закрывается (выгрузка дампа и все такое). С чем это может быть связано?

P.S. если закоментировать строки (хоть обе, хоть по одной)
    // ЭтотОбъект.Действие();
    // ЗначениеВРеквизитФормы(ЭтотОбъект, "Отчет");
ничего не меняется, все-равно вылетает. То есть на ошибку влияет только вызов РеквизитФормыВЗначение.
1 mwide
 
29.11.13
14:15
Еще интереснее... Дело даже не в РеквизитФормыВЗначение, а просто в вызове серверной процедуры из клиентской. То есть вешаем на форму кнопку с коммандой. В обработчике команды вызываем процедуру, объявленную на сервере. После этого попытка изменить настройки компоновщика (хоть через элементы управления, хоть программно) валит 1С....
2 mwide
 
29.11.13
14:29
Решилось через одно место, но работает: серверную процедуру объявляем &НаСервереБезКонтекста. В неё передаем все нужные параметры. Понятно, что менять реквизиты объекта она не сможет.

&НаКлиенте
Процедура Действие(Команда)
    сформировать_Сервер(этаФорма.Отчет, ЕщеЧтоНибудь);
КонецПроцедуры

&НаСервереБезКонтекста
процедура Сформировать_сервер(знач Отчет, знач ЕщеЧтоНибудь)
    объект = ДанныеФормыВЗначение(отчет, тип("ОтчетОбъект.Отчет"));
    объект.Действие(данныеФормыВЗначение(ЧтоНибудь, тип("ТипЧегоНибудь"));
конецПроцедуры
3 banco
 
29.11.13
15:01
(2) вообще то про это в СП написано
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
4 mwide
 
29.11.13
16:25
(3) о каком событии идет речь? У меня серверный вызов делает обработчик команды формы, и он отрабатывает нормально. Но после него, если обратиться к компоновщику настроек, тот валит программу.