Версия для печати темы (https://pro1c.org.ua/index.php?s=091876dc55eb233e60382015859077c0&showtopic=67488)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Не могу получить макет

Автор: alex_shkut 23.02.24, 9:21

Уже 15 лет работаю с 1С и тут туплю. Переменная не определена (ЭтотОбъект) Процедура или функция с указанным именем не определена (ПолучитьМакет) ЧЯДНТ.

Макет = ЭтотОбъект.ПолучитьМакет("Наряд"); // ошибка.

Автор: denis84 23.02.24, 9:23

alex_shkut @ Сегодня, 9:21 * ,

ТабДокумент = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");

Автор: alex_shkut 23.02.24, 9:32

denis84 @ Сегодня, 9:23 * ,
Та же ошибка - Процедура или функция с указанным именем не определена (ПолучитьМакет)

alex_shkut @ Сегодня, 9:26 * ,
Согласен, ЭтотОбъект тут нету, так как список документов. Но просто получить Макет почему не получается?

МассПечать = НакладнаяСобрано.НайтиСтроки(Новый Структура("Выбрать",истина));
Сообщить(""+МассПечать.Количество());
    
Макет = ПолучитьМакет("Наряд");

Автор: volodya1122 23.02.24, 9:32

alex_shkut @ Сегодня, 9:26 * ,

Где именно эта функция вызывается?

 Макет = Документы.НазваниеМоегоДокумента.ПолучитьМакет("Печать");

Автор: alex_shkut 23.02.24, 9:50

volodya1122 @ Сегодня, 9:32 * ,
В модуле списка документов.
Я уже примерно понял - нельзя получить макет вне Объекта.
Нужно вынести его в общие макеты и оттуда вызывать.
Для таких случаев, когда Объекта нет нужно использовать Общие макеты.
Щас проверю и отпишусь.

ДокументОбъект.<Имя документа> (DocumentObject.<Document name>)
ПолучитьМакет (GetTemplate)
Синтаксис:
ПолучитьМакет(<Макет>)
Параметры:
<Макет> (обязательный)

А вот так заработало:
Макет = ПолучитьОбщийМакет("НарядНаПеревозку");

До этого у меня не было таких задач, где из списка документов необходимо печатать что нибудь.
Тут встала задача пометить в списке документы, распечатать этот список и перенести документы в другое состояние.
Ну вроде решилось )

Автор: AnryMc 23.02.24, 10:34

alex_shkut @ Сегодня, 10:50 * ,

Цитата(alex_shkut @ 23.02.24, 10:50) *
В модуле списка документов.


На клиенте? На сервере?

В списке нет "Объекта" к которому вы пытаетесь обратиться - там основной реквизит "Список"

Можно добираться через ТекущиеДанные.ПолучитьОбъект(), Экспортируемую функцию Модуля объекта и ещё .............


Автор: alex_shkut 23.02.24, 11:07

AnryMc @ Сегодня, 10:34 * ,
Не, это толстый клиент.
В списке добавлена колонка - на Отправку.
Все помеченные надо распечатать водителю в наряд и сменить статус - "В доставке".
Так вот возникла проблема получения макета, который доступен только через Объект.
Решено Общим макетом.

alex_shkut @ Сегодня, 10:49 * ,
Для новичков - получить макет печатной формы документа невозможно ВНЕ открытого Объекта.
Если нужно что-то распечатать когда документ не открыт - используйте Общий макет (произвольный) и туда пихайте все что угодно, на ваш вкус.

Автор: AnryMc 23.02.24, 11:18

Цитата(alex_shkut @ 23.02.24, 12:07) *
невозможно ВНЕ открытого Объекта


текОбъект = Список.ТекущиеДанные.Ссылка.ПолачитьОбъект();
Мак = текОбъект .ПолучитьМакет("Наряд");


Объект не открыт - макет поглучен

Автор: alex_shkut 23.02.24, 12:16

AnryMc @ Сегодня, 11:18 * ,
Нету открытого Обїекта = нету Макета.
Ворос решен = ОбщийМакет;

alex_shkut @ Сегодня, 11:46 * ,
Если на текущий момент документ не открыт (нету ЭтотОбъект) то и печатную форму получить нельзя. Макет.
Для прочих состояний используем общие макеты, которые можно получать независимо от форм.

Цитата(AnryMc @ 23.02.24, 11:18) *
Объект не открыт - макет поглючен


Автор: AnryMc 23.02.24, 12:26

Цитата(alex_shkut @ 23.02.24, 12:57) *
Нету открытого Обїекта = нету Макета.
Ворос решен = ОбщийМакет;


АБСОЛЮТНО РАБОЧИЙ КОД:
//Модуль списка
&НаКлиенте
Процедура КомандаПолучитьМакет(Команда)
    
    Для КАЖДОГО текСтр ИЗ Элементы.Список.ВыделенныеСтроки Цикл
        
        ОтчетСформирован = ОбщийМодульСервер.РаспечататьНужныйМакет(текСтр);
        
        ОтчетСформирован.Показать();
        
    КонецЦикла;
    
КонецПроцедуры

//Модуль ОбщийМодульСервер
Функция РаспечататьНужныйМакет(текРКМ) Экспорт
    
    ТабДок = Новый ТабличныйДокумент;
    
    Макет = Справочники.ХХХХХХХХХХХХ.ПолучитьМакет("НужныйМакет");    
        //Макет = Документы.ХХХХХХХХХХХХ.ПолучитьМакет("НужныйМакет"); //Или что надо
    
    Шапка = Макет.ПолучитьОбласть("Шапка");

    Шапка.Область("R1C1").Текст = "Ура получилось!";

    ТабДок.Вывести(Шапка);
    
    ВОЗВРАТ ТабДок;
    
КонецФункции

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua