Печатная форма недоступна

1. Johney20 19.11.18 14:31 Сейчас в теме
Всем привет.

У меня есть некоторые условия в запросе, и если они не выполняются, тогда соответственно запрос пустой и я возвращаю ТабДок. Но у меня выводится пустой табличный документ, что логично. А мне нужно, чтобы выводилось "Печатная форма недоступна", но не сообщением пользователю, а стандартным средством. Как это сделать? Что нужно вернуть?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Octopus 337 19.11.18 14:38 Сейчас в теме
В БСП (если речь идет о нем) возвращается не табличный документ, а целая таблица значений "КоллекцияПечатныхФорм". Вот если она будет пустой, то как раз и выйдет сообщение "Печатная форма недоступна"
4. Johney20 19.11.18 14:41 Сейчас в теме
(2) А как этого добиться? Что мне нужно возвращать?
6. Octopus 337 19.11.18 14:47 Сейчас в теме
(4) Посмотрел сейчас, сообщение "Печатная форма недоступна" выводится, если в результате получается просто Новый ТабличныйДокумент. Наверное, у вас не совсем пустой, т.е. ТабличныйДокумент.Высота <> 0.
7. Johney20 19.11.18 14:58 Сейчас в теме
(6) Да, действительно, у меня высота > 0, только не пойму, где это происходит. У меня по сути, он никак нигде не заполняется, если под условия не подходит..

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Версия = "1.0";
	ПараметрыРегистрации.БезопасныйРежим = Ложь;
	ПараметрыРегистрации.Назначение.Добавить("Документ.ПриемНаРаботу");
	ПараметрыРегистрации.Назначение.Добавить("Документ.ПриемНаРаботуСписком");
	ПараметрыРегистрации.назначение.Добавить("Документ.КадровыйПеревод");
	ПараметрыРегистрации.назначение.Добавить("Документ.КадровыйПереводСписком");
	
	
	// Блок описания команд
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = НСтр("ru = 'Согласие на передачу ПД_ВЭ Софт бизнес'");
	НоваяКоманда.Идентификатор = "Макет";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Истина;
	НоваяКоманда.Модификатор = "ПечатьMXL";
	
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

// Интерфейс для выполнения команд обработки.
//
// ВХОДЯЩИЕ:
//		МассивОбъектов - Массив - Массив ссылок на объекты которые нужно распечатать.
//
// ИСХОДЯЩИЕ:
//   	КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы.
//   	ОшибкиПечати          - Список значений  - Ошибки печати  (значение - ссылка на объект, представление - текст
//                           ошибки).
//   	ОбъектыПечати         - Список значений  - Объекты печати (значение - ссылка на объект, представление - имя
//                           области в которой был выведен объект).
//   	ПараметрыВывода       - Структура        - Параметры сформированных табличных документов.
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Макет") Тогда
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
		КоллекцияПечатныхФорм,
		"Макет",
		НСтр("ru = 'Макет'"),
		СформироватьТабличныйДокумент(МассивОбъектов[0], ОбъектыПечати, ЭтотОбъект.ПолучитьМакет("Макет")),  
		, 
		);
	КонецЕсли;
	
КонецПроцедуры

Функция СформироватьПечатнуюФорму (МассивОбъектов) Экспорт
	
	ОбъектыПечати = Новый СписокЗначений;
	ПараметрыВывода = Неопределено;
	
	ТабДок = СформироватьТабличныйДокумент(МассивОбъектов[0], ОбъектыПечати, ЭтотОбъект.ПолучитьМакет("Макет"));
	Возврат ТабДок;
	
КонецФункции

Функция СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати, Макет)
	
	СсылкаНаОбъект = МассивОбъектов;
	
	ТабДок = Новый ТабличныйДокумент;

	БизнесНаправлениеАТП = Справочники.ЗначенияСвойствОбъектов.ПолучитьСсылку(Новый УникальныйИдентификатор("763f9631-c849-11e6-9dcd-5ef3fce043ff"));
	ГКСельта             = Справочники.Организации.ПолучитьСсылку(Новый УникальныйИдентификатор("3301aff8-e398-11dc-9a43-00304834307b"));
	
	Запрос = Новый Запрос;
	
	Запрос.Текст = "ВЫБРАТЬ
	               |	ЕСТЬNULL(ПриемНаРаботу.ФизическоеЛицо.ФИО, """") КАК ФизическоеЛицоФИО,
	               |	ВЫБОР
	               |		КОГДА ДополнительныеСведения.Значение = &БизнесНаправлениеАТП
	               |			ТОГДА ИСТИНА
	               |		ИНАЧЕ ЛОЖЬ
	               |	КОНЕЦ КАК БизнесНаправлениеАТП,
	               |	ВЫБОР
	               |		КОГДА Организации.Ссылка = &ГКСельта
	               |			ТОГДА ИСТИНА
	               |		ИНАЧЕ ЛОЖЬ
	               |	КОНЕЦ КАК ГКСельта
	               |ИЗ
	               |	Документ.ПриемНаРаботу КАК ПриемНаРаботу
	               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
	               |		ПО (ВЫРАЗИТЬ(ДополнительныеСведения.Объект КАК Справочник.Организации).Ссылка = ПриемНаРаботу.Ссылка.Организация)
	               |			И (ДополнительныеСведения.Свойство = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.БизнесНаправление))
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации КАК Организации
	               |		ПО ПриемНаРаботу.Организация.ГоловнаяОрганизация = Организации.Ссылка
	               |ГДЕ
	               |	ПриемНаРаботу.Ссылка = &Ссылка";
			
	Если ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.ПриемНаРаботуСписком") Тогда
		
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.ПриемНаРаботу КАК ПриемНаРаботу", "Документ.ПриемНаРаботуСписком.Сотрудники КАК ПриемНаРаботуСпискомСотрудники");
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПриемНаРаботу.Организация", "ПриемНаРаботуСпискомСотрудники.Ссылка.Организация");
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПриемНаРаботу.", "ПриемНаРаботуСпискомСотрудники.");
		
	ИначеЕсли ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.КадровыйПеревод") Тогда 
		
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПриемНаРаботу", "КадровыйПеревод");
		
	ИначеЕсли  ТипЗнч(СсылкаНаОбъект) = Тип("ДокументСсылка.КадровыйПереводСписком") Тогда
		
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.ПриемНаРаботу КАК ПриемНаРаботу", "Документ.КадровыйПереводСписком.Сотрудники КАК КадровыйПереводСпискомСотрудники");
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПриемНаРаботу.Организация", "КадровыйПереводСпискомСотрудники.Ссылка.Организация");
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПриемНаРаботу.", "КадровыйПереводСпискомСотрудники.");
	
	КонецЕсли;
	
	Запрос.УстановитьПараметр("Ссылка"              , СсылкаНаОбъект);
	Запрос.УстановитьПараметр("ГКСельта"            , ГКСельта);
	Запрос.УстановитьПараметр("БизнесНаправлениеАТП", БизнесНаправлениеАТП);
	
	Результат = Запрос.Выполнить();
	
	Область = Макет.ПолучитьОбласть("Данные");
	
	Если Не Результат.Пустой() Тогда
		
		Выборка = Результат.Выбрать();
		
		Пока Выборка.Следующий() Цикл
			
			Если Выборка.БизнесНаправлениеАТП Или Выборка.ГКСельта Тогда 
				
				Область.Параметры.ФИОСотрудника = Выборка.ФизическоеЛицоФИО;
				
				ТабДок.Вывести(Область);
				
				ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
				
			Иначе
				
				ТекстСообщения = "Вывод печатной формы возможен только для организаций с бизнес-направлением ""АТП"" или для организаций, с головной организацией ГК ""Сельта"".";
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
				
				Возврат ТабДок;
				
			КонецЕсли;
			
		КонецЦикла;
		
		ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
		ТабДок.АвтоМасштаб = Истина;
		
		Возврат ТабДок;	
		
	КонецЕсли;
	
КонецФункции
Показать
8. Octopus 337 19.11.18 14:58 Сейчас в теме
(7) Значит, где-то все же заполнение происходит ) Дальше разберетесь, я думаю
9. Boneman 298 19.11.18 15:12 Сейчас в теме
(7) ну у тебя же цикл,
может у тебя в первой итерации, заполняется а во второй возврат выходит.

ты пропиши там сразу
Возврат Новый ТабличныйДокумент;
10. Johney20 19.11.18 15:38 Сейчас в теме
(9) Нет, не заходит.

И Новый ТабличныйДокумент прописывала, все равно высота страницы >0.,

Я просто обнуляю высотру страницы теперь в случае, если пф не должна выводиться.
3. Boneman 298 19.11.18 14:41 Сейчас в теме
Еще если код содержит ошибку, и упадет в исключение то тоже ПФ - недоступна.

или вместо ТабДока - попробуй вернуть неопределено, или вызвать исключение.
5. Johney20 19.11.18 14:42 Сейчас в теме
(3) Нет, так не пойдет. В таком случае вылетает служебная ошибка.
Оставьте свое сообщение

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