Имя: Пароль:
1C
1С v8
Внешняя обработка, ошибка в получении макета.
,
0 SSz
 
13.04.20
09:17
Приветствую вас гуру 1С.
Понимаю, что данный вопрос набил уже оскомину, но для новичков вроде меня, он остаётся актуальным.


Есть такой код:

&НаСервере
Функция СформироватьОтчёт()
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Тест");
    ПечатнаяФорма = Новый ТабличныйДокумент;
    Область = Макет.ПолучитьОбласть("Область1");
    ПечатнаяФорма.Вывести(Область);
КонецФункции

При выполнении данного кода, возникает следующая ошибка:

{ВнешняяОбработка.ЗагрузкаДанных.Форма.Форма.Форма(875)}: Ошибка при вызове метода контекста (Вывести)
    ПечатнаяФорма.Вывести(Область);
по причине:
Несоответствие типов (параметр номер '1')

Судя по ошибке, проблема в получении макета.

Как победить данную проблему? Т.к. этот код в другой обработке, прекрасно отрабатывает.
1 Ns33
 
13.04.20
09:26
Посмотри отладчиком что в Область, такое впечатление, что есть реквизит формы с таким именем, но другого типа.
2 Фрэнки
 
13.04.20
09:36
у меня обычно подобный фрагмент выглядит вот так

    ОбъектЗначение = РеквизитФормыВЗначение("Объект", Тип("ДокументОбъект.СамыйНужныйДокумент"));
    Макет_ТабДок = ОбъектЗначение.ПолучитьМакет("ТабДок");

Вероятно, что принципиальное отличие от того, что у тебя в отсутствии второго параметра
или, что еще более вероятно, в данном конкретном использовании что-то не так с "Объект"
3 SSz
 
13.04.20
09:50
(1) - Переменные Макет, ПечатнаяФорма и Область, содержат "ТабличныйДокумент"
(2) - Обработка внешняя. Как ещё можно проверить содержимое "Объект"?
4 Фрэнки
 
13.04.20
09:58
(3) А точно такая область в макете есть?

Проверь отладчиком. Установи в просмотр значений, когда в отладчике сидишь, вот эту запись туда
Макет.ПолучитьОбласть("Область1")
5 SSz
 
13.04.20
10:13
(4) - В переменную "Макет" приходит ТабличныйДокумент макета "тест", в разделе Области, присутствует "Область1" (ОбластьЯчейкиТабличногоДокумента). Использовал выражение "Макет.ПолучитьОбласть("Область1")".
6 Фрэнки
 
13.04.20
10:45
вроде все правильно
7 SSz
 
13.04.20
10:47
(6) - Сам голову ломаю. Похоже опять моя невнимательность.
8 GGDots
 
13.04.20
10:48
Если все проверил и все как надо, но ошибка есть - и нихера не понятно. Сделай копию этой обработки, назови под другому и открой её...
9 SSz
 
13.04.20
10:51
(8) - Спасибо за совет, сейчас попробую.
10 GGDots
 
13.04.20
10:52
Еще часто бывает такая штука: реквизит на форме совпадает по имени с переменными в модуле формы, и они имеют разные типы. Это тоже проверь.
11 SSz
 
13.04.20
10:54
(10) - Копия не помогла, реквизиты формы и переменные уникальны, тоже проверил.
12 GGDots
 
13.04.20
10:56
Обработка ценности не имеет? Если нет, то кинь мне на почту я гляну...ну если не против
13 SSz
 
13.04.20
10:57
(12) - Посмотрим, если сегодня меня не "озарит", то может и скину.
14 GGDots
 
13.04.20
10:58
(13) кк
15 GGDots
 
13.04.20
11:00
ну как вариант, если ошибка не программная и ты в коде уверен - то запусти предприятие с очисткой кэша ClearCache - мало ли
16 SSz
 
13.04.20
11:02
(15) - Тоже была такая идея, сейчас проверю.
17 SSz
 
13.04.20
11:05
(15) - Не помогло.

В какую ещё сторону можно копнуть? А то у меня заканчиваются варианты.
18 GGDots
 
13.04.20
11:10
Скорее всего ты напутал с областями - скинь принт скрин своей области в макете
19 SSz
 
13.04.20
11:16
20 SSz
 
13.04.20
11:17
(18) - Я встраиваю свой функционал в чужую обработку, по этой причине такие пляски с бубном.
21 GGDots
 
13.04.20
11:20
(19) вроде норм. (20) обзави переменные по другому. К примеру "ПечатнаяФорма" = "ПечатнаяФорма2" и т.д. из своего функционала.
22 GGDots
 
13.04.20
11:22
код вроде рабочий. попробуй в свой макет добавить "Область2" и попробуй получить и вывести её
23 GGDots
 
13.04.20
11:23
создай 2 такой же макет и попробуй получить области с него... Ну много вариков же есть - когда не видишь в чем ошибка)
24 SSz
 
13.04.20
11:40
(23) - Спасибо за советы, всё перечисленное уже делал.
25 GGDots
 
13.04.20
11:42
ну тогда как найдешь в чем косяк, напиши хоть! Интересно.
26 MaxS
 
13.04.20
11:43
Чтобы понять используется переменная ещё где-то можно попробовать Рефакторинг - Переименовать. Если даст, значит уникальная переменная.
27 SSz
 
13.04.20
11:58
(25) - Если разберусь, то обязательно сообщу.
(26) - К сожалению уже проверял, не помогло.

Интересно, что в переменные данные попадают, но на строке ПечатнаяФорма.Вывести(Область); появляется сообщение о несоответствии типов.
28 GGDots
 
13.04.20
12:01
Скинь принт скрин табло из отладчика, что бы было понятно какого типа "ПечатнаяФорма", а какого "Область".
29 SSz
 
13.04.20
12:03
30 GGDots
 
13.04.20
12:08
(29) вроде все неплохо...
31 GGDots
 
13.04.20
12:09
этот же код в другой конфе работает?
32 Ёпрст
 
13.04.20
12:10
(29) тест на вшивость:


&НаСервере
Функция СформироватьОтчёт()
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Тест");
    ТабДок = Новый ТабличныйДокумент;
    Область = Макет.ПолучитьОбласть("Область1");
    ТабДок .Вывести(Область);
    Возврат ТабДок;
КонецФункции

&НаКлиенте
Процедура Тест()
   СформироватьОтчёт().Показать();
КонецПроцедуры
33 Ёпрст
 
13.04.20
12:11
ПечатнаяФорма - поди реквизит чего-то у тебя
34 Ёпрст
 
13.04.20
12:11
ну и твоя функция ничего не возвращает, как бэ
35 SSz
 
13.04.20
12:18
(31) - Копия данного текста отрабатывает без проблем, если создать другую внешнюю обработку. Именно в редактируемой (чужой) обработке, возникает ошибка.
(32) - Тест пройден, ошибка осталась.
(33) - Не совсем вас понял, что за реквизит? Если имелось в веду Имя макета, то содержит "Макет".
(34) - Это я знаю, т.к. нет смысла возвращать данные если возникает ошибка.
36 GGDots
 
13.04.20
12:20
33 - проверь "ПечатнаяФорма" встречается в реквизитах обработки или в реквизитах формы?
37 GGDots
 
13.04.20
12:21
Ставкаи
1. Это Кэш.
2  Имя "ПечатнаяФорма" кем-то занята
:)
38 GGDots
 
13.04.20
12:22
хотя в отладчике типы верные
39 SSz
 
13.04.20
12:24
(37) - Где вы были раньше с этим ответом? Я уже всю голову сломал.

Спасибо, теперь всё работает.

:)
40 GGDots
 
13.04.20
12:26
(39) ты шутишь? Тебе об этом писали 50 постов назад)
41 GGDots
 
13.04.20
12:28
50 комментариев вернее)) Блин суть мисты крутая - что бы получить ответ на простой вопрос, необходимо привлечь кучу народа и написать 40 сообщений) ... Хотя достаточно было просто взглянуть на обработку кому нибудь 1 глазом)
42 SSz
 
13.04.20
12:42
(40) - Не тот кэш. Проблема была в накопителе, помог перезапуск машины.
43 sitex
 
naïve
13.04.20
13:25
(42) Чего чего? это что то новое.
Ошибка? Это не ошибка, это системная функция.