Создание печатной формы в конфигураторе (УФ)

1. ovadia 25.09.19 15:35 Сейчас в теме
Разрабатываю нетиповую конфигурацию 1С:8.3 (управляемые формы). В объекте Обработки у меня МояОбработка с формой и реквизитом тзЖурнал. В обработке создал МакетПечати. Не очень понимаю, что нужно сделать, чтобы при нажатии на строку тзЖурнал появлялась форма с возможностью печати макета.

Подскажите, пожалуйста, что требуется написать в foo_Печать(), чтобы открывался МакетПечати?

Пока только в модуле формы тестовый вариант:

&НаКлиенте
Функция foo_Печать() экспорт
	
	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Показать();
	
КонецФункции

&НаКлиенте
Процедура тзЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	foo_Печать();
	
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Aftee 25.09.19 15:44 Сейчас в теме
Получаете макет через ПолучитьМакет(<ИмяМакета>). Получаете области макета через ПолучитьОбласть(<ИмяОбласти>). Заполняете параметры областей, если нужно. Выводите области в табличный документ через Вывести(ОбластьМакета).
По любому методу можно вызвать справку, где будут приведены конкретные примеры.
3. ovadia 25.09.19 15:58 Сейчас в теме
(2) Сделал так:

&НаКлиенте
Функция foo_ПечатьПоручения() экспорт
	
	ТабДок = Новый ТабличныйДокумент;
	
	//ТабДок.Показать();
	
	Макет = ЭтотОбъект.ПолучитьМакет("МакетПечать");
	Область = Макет.ПолучитьОбласть("ОбластьДанных");
	ТабДок.Вывести(Область);
	
КонецФункции
Показать


В клиенте выдается окно с ошибкой: Метод объекта не обнаружен (ПолучитьМакет)
4. SlavaKron 25.09.19 16:28 Сейчас в теме
Макет можно получить только на сервере. На выбор, контекстный вызов:
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Макет = ОбработкаОбъект.ПолучитьМакет("МакетПечать");

или без контекста формы:
ОбработкаОбъект = Новый("ВнешняяОбработкаОбъект.МояВнешняяОбработка");
Макет = ОбработкаОбъект.ПолучитьМакет("МакетПечать");

Дальше, если уж так хочется рисовать ТабДок на клиенте, передавайте Макет на клиент.
5. ovadia 25.09.19 16:40 Сейчас в теме
(4) Я так и сделал, но все равно есть ошибки.

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



В клиенте ошибка: Ошибка при установке значения атрибута контекста (Объект)
6. SlavaKron 25.09.19 16:41 Сейчас в теме
(5) В процедуре ПолучитьМакетНаСервере переименуйте переменную "Объект".
7. ovadia 25.09.19 17:09 Сейчас в теме
(6)
ПолучитьМакетНаСервере переименуйте переменную "Объект"


Во что переименовать, в произвольное имя, в кавычках?
8. SlavaKron 25.09.19 17:12 Сейчас в теме
(7) Объект - это данные формы, вы не можете просто так им что-то присваивать. У вас конфликт имен. Переименуйте Объект во что угодно другое, например, ОбработкаОбъект.
9. ovadia 25.09.19 17:20 Сейчас в теме
(8) Что то не так. Переименовал и появилась ошибка

Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
Объект = РеквизитФормыВЗначение("ОбработкаОбъект");
по причине:
Недопустимое значение параметра (параметр номер '1')
10. Drak0n 187 25.09.19 17:28 Сейчас в теме
(9) Макет = Обработки.МояОбработка.ПолучитьМакет("МакетПоручениеБиржа");
11. ovadia 25.09.19 17:37 Сейчас в теме
(10)
Обработки.МояОбработка.ПолучитьМакет("МакетПоручениеБиржа");


Не верно! Ваша строка работать не будет. Будет ошибка -- Переменная не определена (Обработки)
12. Drak0n 187 25.09.19 17:47 Сейчас в теме
(11) Аргументируете?
Обработки - класс объекта метаданных. Обработки.МояОбработка - получим ОбработкаМенеджер, у которого есть метод ПолучитьМакет.
На сервере сработает.
13. ovadia 25.09.19 18:14 Сейчас в теме
(12)
Аргументируете?


Я говорил про клиент. С Вашей строкой на сервере все равно клиент выдает ошибку. Другая, но ошибка. Я что-то не понимаю, что и где (сервер, клиент) нужно писать.


&НаСервере
Функция ПолучитьМакетНаСервере()
	
	//Объект = РеквизитФормыВЗначение("Объект");
	//Макет = Объект.ПолучитьМакет("МакетПоручениеБиржа");
	Макет = Обработки.Подключение1сФЦ.ПолучитьМакет("МакетПоручениеБиржа");
	
    Возврат Макет;
	
КонецФункции

&НаКлиенте
Функция foo_ПечатьПоручения() экспорт
	
	ТабДок = Новый ТабличныйДокумент;
	    
    //ТабДок.Показать();
    
    Макет = ПолучитьМакетНаСервере();
    Область = Макет.ПолучитьОбласть("ОбластьДанных");
    ТабДок.Вывести(Область);
	
КонецФункции

&НаКлиенте
Процедура тзЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	foo_ПечатьПоручения();
	
КонецПроцедуры
Показать


Ошибка при вызове метода контекста (ПолучитьОбласть)
    Область = Макет.ПолучитьОбласть("ОбластьДанных");
по причине:
Метод недоступен на тонком клиенте
 
14. VictorRGB2 14 25.09.19 18:25 Сейчас в теме
к чем такие сложности?
разве что само формирование вынести в модуль обработки
но можно и в модуле формы все сделать

&НаКлиенте
Процедура тзЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	foo_ПечатьПоручения();
	
КонецПроцедуры

&НаКлиенте
Функция foo_ПечатьПоручения() экспорт
	
	ТаблДокумент = foo_ПечатьПорученияНаСервере();
	
	Если ТаблДокумент <> Неопределено Тогда
		ТаблДокумент.ОтображатьСетку = Ложь;
		ТаблДокумент.ОтображатьЗаголовки = Ложь;
		ТаблДокумент.ТолькоПросмотр = Истина;
		ТаблДокумент.АвтоМасштаб = Истина;
		ТаблДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
		ТаблДокумент.Показать();
	КонецЕсли;


КонецФункции

&НаСервере
Функция foo_ПечатьПорученияНаСервере()
	
естьДанныеПечати = Ложь;

	ОбъектОбработки = РеквизитФормыВЗначение("Объект");
	МакетПечати = ОбъектОбработки.ПолучитьМакет(<ИмяМакета>);
	ТаблДокумент = Новый ТабличныйДокумент;

	ОбластьДанных = МакетПечати.ПолучитьОбласть("ОбластьДанных");
	ОбластьШапка.Параметры.<ИмяПараметра>= <Заполнение занчения параметра>;

	ТаблДокумент.Вывести(ОбластьДанные);
естьДанныеПечати = Истина;

	Возврат ?(естьДанныеПечати, ТаблДокумент, Неопределено);

КонецФункции
Показать
15. ovadia 25.09.19 18:43 Сейчас в теме
(14)
естьДанныеПечати


Что такое естьДанныеПечати?
16. VictorRGB2 14 25.09.19 18:52 Сейчас в теме
(15) признак, чтобы не выводить на экран пустой табличный документ, если в нем ничего не оказалось

вообще у вас по условию еще надо в серверную процедуру передавать структуру заполнения параметров, которую формировать по данным "ВыбраннаяСтрока" из Процедура тзЖурналВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

ну или как-то по другому параметры областей макета заполнять
17. ovadia 26.09.19 10:08 Сейчас в теме
Я что-то так и не могу понять, что именно нужно сделать. Допустим у меня есть пустой макет (шаблон таблицы без параметров) в МоейОбработке. Я хочу вывести её на экран, пока что без заполнения значений параметров.

Может кто-нибудь пошагово объяснить, что мне для этого нужно сделать на клиенте и на сервере или дайте ссылку, пожалуйста, где об этом рассказывается подробно (в интернете есть видео с примером для внешней обработки и использованием функции
СведенияОВнешнейОбработке()
, но это в моем случае не подходит, так как у меня не внешняя обработка).
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот