Имя: Пароль:
1C
1С v8
Проблема с получением макета во внешнем отчете
,
0 Fire-Rex
 
30.09.15
09:02
Добрый день! Делаю внешний отчет кассовая книга для БСП 3.0. Задача - изменить счет в выборке. Все запросы идут через два десятка общих модулей, нашел отладчиком тот, в котором запрос формируется - перетянул в отчет. Синтакс-помошник говорит все нормально, но в отладке ругается:
Макет = ЭтотОбъект.ПолучитьМакет("КассоваяКнига"). Где я накололся?
1 jurassic
 
30.09.15
09:07
тебе всё рассказали русским по белому
2 Fire-Rex
 
30.09.15
09:08
Изначально было
Макет = ПолучитьМакет("КассоваяКнига") Переделал. В "ЭтотОбъект" проблема?
3 1Сергей
 
30.09.15
09:09
>>Где я накололся?
в подъезде...

Макет перетянул в отчет?
4 Fire-Rex
 
30.09.15
09:09
перетянул
5 StillEnough
 
30.09.15
09:10
если это отчет - тогда пиши ОтчетОбъект.ПолучитьМакет.
А вообще смотри на сервере или на клиенте получаешь, мб в этом проблема.
6 Fire-Rex
 
30.09.15
09:11
Да, насчет Сервер/Клиент тоже думал. Пробовал и так и так.
7 StillEnough
 
30.09.15
09:12
саму ошибку напишите сюда
8 jurassic
 
30.09.15
09:12
(7) не надо. мы обожаем загадки
9 StillEnough
 
30.09.15
09:13
(8) слишком рано еще у меня для загадок (:
10 Fire-Rex
 
30.09.15
09:13
{Форма.ФормаОтчета.Форма(886)}: Метод объекта не обнаружен (ПолучитьМакет)
    Макет = ЭтотОбъект.ПолучитьМакет("КассоваяКнига");
11 1Сергей
 
30.09.15
09:14
(10) см (5)
12 jurassic
 
30.09.15
09:14
а что, СП правда утверждает, что у формы можно получить макет?
13 Fire-Rex
 
30.09.15
09:14
{Форма.ФормаОтчета.Форма(886,10)}: Переменная не определена (ОтчетОбъект)
    Макет = <<?>>ОтчетОбъект.ПолучитьМакет("КассоваяКнига"); (Проверка: Сервер
14 Goggy
 
30.09.15
09:15
(10) Ну чтож ты...
Даю подсказку, чтоб ты тоже подумал своей головешкой.

--------------------------------------------------------


УправляемаяФорма (ManagedForm)
РеквизитФормыВЗначение (FormAttributeToValue)
Синтаксис:

РеквизитФормыВЗначение(<ИмяРеквизита>, <Тип>)
Параметры:

<ИмяРеквизита> (обязательный)

Тип: Строка.
Имя реквизита формы, который необходимо преобразовать.
Может быть указан реквизит данных формы (см. описание параметра <Объект> метода ДанныеФормыВЗначение).
<Тип> (необязательный)

Тип: Тип.
Тип значения, получаемого из реквизита формы (данных формы). Если данный параметр не указан, то он также получается из реквизита формы. Если реквизит является составным типом и значение параметра не указано, генерируется исключение времени выполнения.
Возвращаемое значение:

Тип: Произвольный.

Описание:

Преобразует указанный реквизит формы в объект прикладного типа.

Доступность:

Сервер, мобильное приложение(сервер).
15 StillEnough
 
30.09.15
09:18
v8: 8.2 Внешняя обработка => Управляемая форма => ПолучитьМакет
смотри в теме 3 пост примерно код готовый. делай по аналогии
16 Fire-Rex
 
30.09.15
09:33
Что-то не пойму
17 Fire-Rex
 
30.09.15
09:39
&НаСервере
Функция ПолучитьМакетНаСервере()
    ЭтотОбъект=РеквизитФормыВЗначение("Объект");
    Макет = ЭтотОбъект.ПолучитьМакет("Макет");
    Возврат Макет;
КонецФункции
18 Fire-Rex
 
30.09.15
09:40
Как теперь перед запросом обратиться к макету?
19 jurassic
 
30.09.15
09:43
ОМойМакет=ПолучитьМакетНаСервере();
Запрос=Новый Запрос;
20 Fire-Rex
 
30.09.15
09:45
{Форма.ФормаОтчета.Форма(2154)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
    ЭтотОбъект=РеквизитФормыВЗначение("Объект");
по причине:
Недопустимое значение параметра (параметр номер '1')
21 Fire-Rex
 
30.09.15
09:49
Что-то пошло не так, Сэр
22 jurassic
 
30.09.15
09:51
будешь искать реквизит формы Объект?
23 Fire-Rex
 
30.09.15
09:56
Ребят, не ругайтесь только. На форме основной реквизит - "Отчет". Переделал, теперь вот что:
{Форма.ФормаОтчета.Форма(2154)}: Поле объекта недоступно для записи (ЭтотОбъект)
    ЭтотОбъект = РеквизитФормыВЗначение("Отчет");
24 Fire-Rex
 
30.09.15
09:57
Я, видимо, не правильно понимаю "Объект"
25 jurassic
 
30.09.15
09:58
>Поле объекта недоступно для записи
это значит, что туда писать ничего нельзя
26 Timon1405
 
30.09.15
10:01
(23) как насчет
НикогдаНеНазывайСвоюПеременнуюЭтотОбъект = РеквизитФормыВЗначение("Отчет"); ?
27 Fire-Rex
 
30.09.15
10:21
(26) Да,спасибо, так и сделал
28 Fire-Rex
 
30.09.15
10:21
ЭтотОтчет
29 hhhh
 
30.09.15
10:26
ЭтотОбъект слово уже занято. Это Форма сама. Никак поверх нее Объект не запихнете.
30 Fire-Rex
 
30.09.15
10:40
Да-да, спасибо большое! Разобрался - понял.
31 Fire-Rex
 
30.09.15
12:21
Еще вопрос. Мне для каждого макета отдельную функцию прописывать? Или так пойдет:
Функция ПолучитьМакетНаСервере()
    ЭтотОтчет = РеквизитФормыВЗначение("Отчет");
    Макет = ЭтотОтчет.ПолучитьМакет("КассоваяКнига");
    Макет2 = ЭтотОтчет.ПолучитьМакет("ОповеститьОПроблеме");
    Возврат Макет;
КонецФункции
32 jurassic
 
30.09.15
12:22
Функция ПолучитьМакетНаСервере(НомерМакета)
Возврат Вычислить("Макет"+НомерМакета)

гыгы
33 Fire-Rex
 
30.09.15
12:26
Функция ПолучитьМакетНаСервере(НомерМакета)
    ЭтотОтчет = РеквизитФормыВЗначение("Отчет");
    Макет = ЭтотОтчет.ПолучитьМакет("КассоваяКнига");
    Макет2 = ЭтотОтчет.ПолучитьМакет("ОповеститьОПроблеме");
    Возврат Вычислить("Макет"+НомерМакета)
КонецФункции
34 jurassic
 
30.09.15
12:28
можешь выкинуть уже свою функцию и получать макет непосредственно перед употреблением
35 Fire-Rex
 
30.09.15
12:38
(34) Не понял
36 jurassic
 
30.09.15
12:40
(35) в (2) уже было почти правильно
2 + 2 = 3.9999999999999999999999999999999...