Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

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

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


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

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

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

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

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

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

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

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

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

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

Интересно, что в переменные данные попадают, но на строке ПечатнаяФорма.Вывести(Область); появляется сообщение о несоответствии типов.
   GGDots
 
28 - 13.04.20 - 12:01
Скинь принт скрин табло из отладчика, что бы было понятно какого типа "ПечатнаяФорма", а какого "Область".
   SSz
 
29 - 13.04.20 - 12:03
   GGDots
 
30 - 13.04.20 - 12:08
(29) вроде все неплохо...
 
 Рекламное место пустует
   GGDots
 
31 - 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
ну и твоя функция ничего не возвращает, как бэ
   SSz
 
35 - 13.04.20 - 12:18
(31) - Копия данного текста отрабатывает без проблем, если создать другую внешнюю обработку. Именно в редактируемой (чужой) обработке, возникает ошибка.
(32) - Тест пройден, ошибка осталась.
(33) - Не совсем вас понял, что за реквизит? Если имелось в веду Имя макета, то содержит "Макет".
(34) - Это я знаю, т.к. нет смысла возвращать данные если возникает ошибка.
   GGDots
 
36 - 13.04.20 - 12:20
33 - проверь "ПечатнаяФорма" встречается в реквизитах обработки или в реквизитах формы?
   GGDots
 
37 - 13.04.20 - 12:21
Ставкаи
1. Это Кэш.
2  Имя "ПечатнаяФорма" кем-то занята
:)
   GGDots
 
38 - 13.04.20 - 12:22
хотя в отладчике типы верные
   SSz
 
39 - 13.04.20 - 12:24
(37) - Где вы были раньше с этим ответом? Я уже всю голову сломал.

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

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


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