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

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

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

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