Вход | Регистрация
 

Мне в код попала ссылка на объект управляемой формы внешнего отчета. Нужно получить схему

Мне в код попала ссылка на объект управляемой формы внешнего отчета. Нужно получить схему
Я
   TormozIT
 
19.07.20 - 20:33
Неизвестный пользователь открыл неизвестный файл внешнего отчета и вызвал мою функцию на клиенте. Я в своей функции определил имя этой формы например ВнешнийОтчет.Отчет1.Форма.ФормаОтчета. Как мне теперь получить схему компоновки?
   TormozIT
 
1 - 19.07.20 - 20:36
Без явного вызова ВнешниеОтчеты.Подключить(), если пользователь открывает файл внешнего отчета интерактивно, этот отчет получает временное имя для выполнения ВнешниеОтчеты.Создать("ИмяПодключенногоВнешнегоОтчета")? Если да, то какое? Попробовал через имя "Отчет1" - ошибка.
   Franchiser
 
2 - 19.07.20 - 20:54
Схема разве как то связана с формой отчёта?
   hhhh
 
3 - 19.07.20 - 20:55
(1) а если  РеквизитФормыВЗначение("Отчет")  ??
   Franchiser
 
4 - 19.07.20 - 20:55
Там нужно взять идентификатор из сведенияовнешнейобработки()
   TormozIT
 
5 - 19.07.20 - 20:57
(4) Отчет неизвестный, т.е. произвольный, т.е. в нем вообще может не быть кода и в базе может не быть БСП.
   TormozIT
 
6 - 19.07.20 - 20:58
(3) Это можно делать только на сервере, а я на клиенте. На лету вставить в модуль формы отчета свой код я не смогу.
   Franchiser
 
7 - 19.07.20 - 21:13
(6) что мешает из твоей процедуры вызвать серверный модуль?
   hhhh
 
8 - 19.07.20 - 21:21
(6) ВнешнийОтчет (ExternalReport)
СхемаКомпоновкиДанных (DataCompositionSchema)
Использование:
Чтение и запись.
Описание:
Тип: СхемаКомпоновкиДанных.
Схема компоновки, на основании которой будет выполняться отчет.
Доступность:
Сервер, толстый клиент, внешнее соединение.

СхемаКомпоновкиДанных  только на сервере.
   TormozIT
 
9 - 19.07.20 - 21:25
(8) Прочитай свое сообщение внимательнее -
Доступность:
Сервер, толстый клиент, внешнее соединение.

Это НЕ "только на сервере".
   TormozIT
 
10 - 19.07.20 - 21:26
(7) Могу вызывать свой общий модуль на сервере. Что мне это даст?
   Franchiser
 
11 - 19.07.20 - 21:27
Передаешь туда УФ в процедуре.
Далее пишешь УФ.РеквизитФормыВЗначение("Отчет")
   TormozIT
 
12 - 19.07.20 - 21:27
Чтобы вызвать РеквизитФормыВЗначение нужен объект формы. А на сервере он доступен только в собственном контекстном вызове. Т.е. передать объект формы по ссылке на сервер нельзя.
   Franchiser
 
13 - 19.07.20 - 21:29
(12) да ладно чё это нельзя. Мне кажется я передавал. Ты попробуй. И в типовых такой код вызова УФ.РеквизитФормыВЗначение("Отчет") встречал.
   TormozIT
 
14 - 19.07.20 - 21:30
(13) Ну я в этом абсолютно уверен. Ты ошибаешься.
   TormozIT
 
15 - 19.07.20 - 21:32
(13) "в типовых такой код вызова УФ.РеквизитФормыВЗначение("Отчет") встречал"
Из собственного контекстного вызова передать в общий модуль ссылку на саму форму (контекстного вызова) конечно можно. Но передать ее на сервер с клиента "снаружи" нельзя - только через контекстный серверный вызов.
   Franchiser
 
16 - 19.07.20 - 21:34
ОбщийМодуль.БухгалтерскиеОтчеты в типовой БП 3.0 Корп:

// Определяет имя отчета (объекта метаданных), отображаемого в форме.

//
// Параметры:

//    Форма - ФормаКлиентскогоПриложения - Форма объекта.
//

// Возвращаемое значение:
//    Строка - Имя объекта метаданных.

//
Функция ИмяОтчета(Форма) Экспорт
    
    ИмяОтчета = БухгалтерскиеОтчетыКлиентСервер.ИмяОтчетаПоИмениФормы(Форма);
    Если ИмяОтчета <> Неопределено Тогда
        Возврат ИмяОтчета;
    КонецЕсли;
    
    // Основной реквизит формы должен называться Отчет

    ОтчетОбъект = Форма.РеквизитФормыВЗначение("Отчет");
    Возврат ОтчетОбъект.Метаданные().Имя;
    
КонецФункции
   Franchiser
 
17 - 19.07.20 - 21:36
(14) я про внеконтекстный вызов...
   Franchiser
 
18 - 19.07.20 - 21:38
Всегда можно уф передать в как параметр в процедуру на клиенте с директивой наклиентебезконтекста, насерверебезконтекста
   TormozIT
 
19 - 19.07.20 - 21:45
(17) Во внеконтекстном серверном вызове не может быть объекта формы.
   TormozIT
 
20 - 19.07.20 - 21:48
В метод с директивой компиляции &насерверебезконтекста передать форму можно только внутри контекстного серверного вызова, т.е. делаем контекстный серверный вызов и уже внутри него вызываем такой метод, но с клиента на сервер вызов должен быть контекстным.
   Franchiser
 
21 - 19.07.20 - 21:49
(19) может быть если текущую форму передали как параметр процедуры , и указали директиву НаСервереБезКонтекста
   Franchiser
 
22 - 19.07.20 - 21:52
(20) не знаю, что ты имеешь ввиду, но если в клиентском модуле, ты можешь получить форму, то ее можно передать в модуль на сервере, и это будет не контекстный вызов сервера.
   Franchiser
 
23 - 19.07.20 - 21:55
(20) мы говорим о клиентском общем модуле?
   Cyberhawk
 
24 - 19.07.20 - 21:56
ДанныеФормыВЗначение работает без контекста, может через него попробовать?
   TormozIT
 
25 - 19.07.20 - 22:08
(24) Да он работает без контекста и даже на толстом клиенте, но он требует указания типа создаваемого объекта. Где взять тип? В общем то это вопрос из той же области что и (0)
   TormozIT
 
26 - 10.08.20 - 14:30
Подниму


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.