Имя: Пароль:
1C
1С v8
Как в УФ получить форму документа по идентифкатору, заданному строкой?
0 megabax
 
27.03.15
12:17
Добрый день. На клеинте необходимо получить форму документа, у которого известен индетификатор в виде строки, тоесть вот так:
&НаКлиенте
Процедура ДокументацияТипДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    //Элементы.Документация.ТекущиеДанные.ТипДокумента=ВыбранноеЗначение.Значение;
    Если ТипЗнч(ВыбранноеЗначение)=Тип("Строка") Тогда
        стр=ПолучитьСписокВидовДокументов1С();
        л_Список=стр;
        л_Элемент=л_Список.ВыбратьЭлемент("Выберите тип документа");
        Если л_Элемент=Неопределено Тогда
            Возврат;
        КонецЕсли;
        л_Форма=ПолучитьФормуДокумента(л_Элемент.Значение);
        л_Форма.ЗакрыватьПриВыборе=Истина;
        л_Форма.Открыть();
    Иначе
        //СтандартнаяОбработка=Ложь;
        //ЭлементыФормы.Документация.ТекущиеДанные.ТипДокумента=ВыбранноеЗначение;
    КонецЕсли;
КонецПроцедуры

Форму пытаюсь получить на свере, так как на клеинте не доступны метаданные:
&НаСервере
функция ПолучитьФормуДокумента(л_Элемент)
    возврат Документы[л_Элемент].ПолучитьФормуВыбора(,Элементы.Документация);
конецфункции
и не работает, говорит:
{Справочник.битТесты.Форма.ФормаЭлементаУпр.Форма(43)}: Ошибка при вызове метода контекста (ПолучитьФормуВыбора)
    возврат Документы[л_Элемент].ПолучитьФормуВыбора(,Элементы.Документация);
по причине:
Интерактивные операции недоступны
Интерактивные операции недоступны

Подскажите поажулйста, как лечить?
1 Cube
 
27.03.15
12:18
(0) Получай форму &НаКлиенте
2 megabax
 
27.03.15
12:19
(1) На клиенте не доступны метаданные
3 megabax
 
27.03.15
12:23
(1) Сделал так:
&НаСервере
функция ПолучитьФормуДокумента(л_Элемент)
    //возврат Документы[л_Элемент].ПолучитьФормуВыбора(,Элементы.Документация);
    возврат Документы[л_Элемент];
конецфункции

&НаКлиенте
Процедура ДокументацияТипДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    //Элементы.Документация.ТекущиеДанные.ТипДокумента=ВыбранноеЗначение.Значение;
    Если ТипЗнч(ВыбранноеЗначение)=Тип("Строка") Тогда
        стр=ПолучитьСписокВидовДокументов1С();
        л_Список=стр;
        л_Элемент=л_Список.ВыбратьЭлемент("Выберите тип документа");
        Если л_Элемент=Неопределено Тогда
            Возврат;
        КонецЕсли;
        л_Форма=ПолучитьФормуДокумента(л_Элемент.Значение).ПолучитьФормуВыбора(,Элементы.Документация);
        л_Форма.ЗакрыватьПриВыборе=Истина;
        л_Форма.Открыть();
    Иначе
        //СтандартнаяОбработка=Ложь;
        //ЭлементыФормы.Документация.ТекущиеДанные.ТипДокумента=ВыбранноеЗначение;
    КонецЕсли;
КонецПроцедуры

теперь говорит:
{Справочник.битТесты.Форма.ФормаЭлементаУпр.Форма(57)}: Ошибка при вызове метода контекста (ПолучитьФормуДокумента)
        л_Форма=ПолучитьФормуДокумента(л_Элемент.Значение).ПолучитьФормуВыбора(,Элементы.Документация);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'ret':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДокументМенеджер.ВозвратТоваровОтКлиента'
4 Cube
 
27.03.15
12:25
ОткрытьФорму() не предлагать?
5 Fragster
 
гуру
27.03.15
12:25
ОткрытьФорму("Документ."+ВидДокумента+".ФормаВыбора)
6 megabax
 
27.03.15
12:34
(5) Спасибо, вот так заработало:
&НаКлиенте
Процедура ДокументацияТипДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    //Элементы.Документация.ТекущиеДанные.ТипДокумента=ВыбранноеЗначение.Значение;
    Если ТипЗнч(ВыбранноеЗначение)=Тип("Строка") Тогда
        стр=ПолучитьСписокВидовДокументов1С();
        л_Список=стр;
        л_Элемент=л_Список.ВыбратьЭлемент("Выберите тип документа");
        Если л_Элемент=Неопределено Тогда
            Возврат;
        КонецЕсли;
        //сообщить(л_Элемент);
        ОткрытьФорму("Документ."+л_Элемент.Значение+".ФормаВыбора");
        //л_Форма=ПолучитьФормуДокумента(л_Элемент.Значение).ПолучитьФормуВыбора(,Элементы.Документация);
        //л_Форма.ЗакрыватьПриВыборе=Истина;
        //л_Форма.Открыть();
    Иначе
        //СтандартнаяОбработка=Ложь;
        //ЭлементыФормы.Документация.ТекущиеДанные.ТипДокумента=ВыбранноеЗначение;
    КонецЕсли;
КонецПроцедуры
Но как теперь получить выбранный документ?
7 Cube
 
27.03.15
12:35
(6) Я, наверное, покажусь неоригинальным, но кури ОткрытьФормуМодально() :)
А вообще, от модальности в будущем надо будет уходить.
8 megabax
 
27.03.15
12:52
(7) "А вообще, от модальности в будущем надо будет уходить." - вот в том то и вся проблема. Хочеться сделать сразу по правилам, что бы потом не любитья не переделывать.
9 Cube
 
27.03.15
12:55
(8) Ну что тебя останавливает? Зазеркалье не читаешь что-ли?
http://v8.1c.ru/o7/201301nm/
http://v8.1c.ru/o7/201312ref/index.htm
10 Kondarat
 
27.03.15
12:56
(6) ОткрытьФорму("Документ."+л_Элемент.Значение+".ФормаВыбора",,Элемент);
Не?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс