Имя: Пароль:
1C
1С v8
Доступ к управляемой форме из обычной. Как получить ТЗ динамического списка?
,
0 totparen
 
25.09.17
20:31
Ребята, помогите разобраться.
Есть встроенная обработка с управляемой формой. На форме динамический список (запросом, без основной таблицы).

Открываю форму программно из обычной формы:

лФорма = Обработки.РабочееМестоДиспетчераАвтосервиса.ПолучитьФорму("Форма");
лФорма.Открыть();


В самой управляемой форме могу получить ТЗ через вызов серверной процедуры (Вызов из ПриОткрытии):

&НаСервере
Процедура ВызовНаСервере()

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

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    
    ТЗ = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТЗ);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    // ТЗ получено.
    
КонецПроцедуры

Но как то же самое сделать из вне?
1 totparen
 
25.09.17
20:33
При попытке выполнить код

    лФорма = Обработки.РабочееМестоДиспетчераАвтосервиса.ПолучитьФорму("Форма");
    лФорма.Открыть();
    
    Схема = лФорма.Элементы.НеОбработанныеСобытия.ПолучитьИсполняемуюСхемуКомпоновкиДанных();


получаю ошибку:

Ошибка при вызове метода контекста (ПолучитьИсполняемуюСхемуКомпоновкиДанных)
    Схема = лФорма.Элементы.НеОбработанныеСобытия.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
по причине:
Метод недоступен на клиенте
2 PiotrLoginov
 
25.09.17
20:55
Вообще, в ОФ тоже есть возможность разделить выполнение на серверное и клиентское. Я бы в этом направлении порылся. Еще можно начать с внимательного прочтения описания ПолучитьИсполняемуюСхемуКомпоновкиДанных()
3 totparen
 
25.09.17
22:14
Ещё есть идеи?
4 totparen
 
26.09.17
08:23
Кроме как выносить код в отдельный модуль с свойством СЕРВЕР, возможно ли ещё как-то выполнять код обработки на сервере?
5 toypaul
 
гуру
26.09.17
09:08
если надо получить только ТЗ, то сохранить ее во врем хранилище
6 Рэйв
 
26.09.17
09:11
(0)А взять текст запроса из ДС, выполнить и выгрузить результат в ТЗ никак?
7 DrShad
 
26.09.17
09:13
(6) он так и хочет, но уже с установленными отборами
8 Fedor-1971
 
26.09.17
09:29
(2) ПолучитьИсполняемуюСхемуКомпоновкиДанных() - доступна в контексте НаСервере, текст запроса, то же.
Открыть() - работает в контексте НаКлиенте, т.е. пробуй создать в полученной форме обработки экспортную функцию с контекстом НаКлиенте, которая ломанётся на сервер и достанет тебе схему компоновки.
Как вариант: положить инициализацию ДС в модуль менеджера обработки и тогда до инициализации "по умолчанию" достучишься без проблем
9 totparen
 
26.09.17
09:29
По правде говоря, цель не сама ТЗ, а возможность проверять состояние/содержание элементов на управляемой форме.
10 totparen
 
26.09.17
09:30
Деллая эту проверку не вторгаясь в код управляемой формы.
11 PiterPrg
 
26.09.17
09:33
Можно попробывать на управляемой форме сделать Экспортную Клиентскую процедуру (Из которой уже сможешь вызывать серверную). И из неуправляемой формы вызывать именно клиентскую процедуру.
(Надеюсь, понятно написал :-) )
12 Рэйв
 
26.09.17
09:44
(7)Ну заполнил бы параметры как нужно и были бы ему отборы.
13 totparen
 
26.09.17
09:54
(12) -> (9)(10)

(11) попробую.
14 Fedor-1971
 
26.09.17
09:54
(9) Зачем что-то искать снаружи именно в форме? Есть Объект в БД - читаем что нужно из него, а связываться с не записанными данными себе дороже.
Логика заполнения вычисляемых полей (статусы, некие расчётные доп.данные) выносится, например, в модуль менеджера и получается по ссылке на Объект полностью однообразно из формы и откуда надо
15 totparen
 
26.09.17
09:58
(14) Искать из вне для целей автоматизированного тестирования. Проверка поведения формы.
16 Fedor-1971
 
26.09.17
10:06
(15) для этого, скорее всего, есть внешние инструменты.
Как я понимаю, должен быть некий пул нажатий кнопок пользователем с описанием ожидаемых эталонных результатов.
Слабо представляю как машина оценит корректность сортировки (особенно частые грабли сортировка по ссылке справочника, а не по наименованию)
17 Fedor-1971
 
26.09.17
10:08
16+ пока нет конечной концепции форм, автоматизированное тестирование несколько затруднительно. Как пример: борьба с модальностью.