Как прервать формирование внешней печатной формы

1. n_spb 12.04.17 22:09 Сейчас в теме
1С 8.3, сделал внешнюю печатную форму для документа с использованием серверного метода. В модуле объекта обработки есть процедура:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Как сделать, чтобы печатная форма формировалась только если есть определенные данные в документе из которого она печатается, а если этих данных нет тогда выходит только сообщение для пользователя, что нужно заполнить данные. С выводом сообщения порядок. Подскажите, как прервать формирование печатной формы?
Hogyoku; Sergio_S11; vakham; +3 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. PhoenixAOD 62 05.05.17 01:51 Сейчас в теме
(1)Попробуйте тогда такое условия в процедуре печати
Если Не ЗначениеЗаполнено(ПроверяемоеЗначение) Тогда 
Предцпреждение(Текст);
Отказ = Истина;
Иначе
ВашКодПечати
КонецЕсли;
10. EVKash 16 27.09.17 13:32 Сейчас в теме
(1) (8) а где формируется печатная форма? в процедуре печать формы обработки? или в модуле самой обработки? и вообще... код бы выложили понятней было-бы.
11. user633533_encantado 12 27.09.17 13:33 Сейчас в теме
(10) В первом сообщении написано "Вызов серверного метода", значит в модуле обработки.
13. EVKash 16 27.09.17 13:39 Сейчас в теме
(11) вот мне и интересно как эта печатная форма на клиенте появляется.
16. user633533_encantado 12 27.09.17 13:44 Сейчас в теме
(13) С помощь. БСП печати, обычное дело. Например серверным методом "УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию".
21. prog1c_vl 25 23.11.23 14:58 Сейчас в теме
(1)
Если условие проверки не выполняется, то сделайте возврат из функции вот так:
Возврат(Неопределено)
2. eksetro 6 12.04.17 23:38 Сейчас в теме
Чем плох вариант условия, где в блоке "тогда" формируется печатная форма, в блоке "иначе" выдаются сообщения?
4. n_spb 13.04.17 21:37 Сейчас в теме
(2) По иначе сообщения выводится, и печатная форма формируется с ошибкой т.к. нет нужных данных, процесс формирования печатной формы все равно продолжается.
(3) Пробовал так, работает, как нужно. Проблема только в появляющемся окошке в нем есть две кнопки Ок и Подробно если нажать подробно там текст с текстом ошибки и кодом который вызвал это окошко. Не очень это окошко дружелюбно для пользователя, что-то бы более дружелюбное.
5. onetone 14.04.17 02:14 Сейчас в теме
(4) Тогда так
Если Не ЗначениеЗаполнено(ПроверяемоеЗначение) Тогда 
Предцпреждение(Текст);
Возврат;
КонецЕсли;
6. zerg17 05.05.17 00:23 Сейчас в теме
(5) Если "Процедура или функция с указанным именем не определена (Предупреждение)" - как её вызывать?
3. onetone 13.04.17 01:01 Сейчас в теме
Если Не ЗначениеЗаполнено(ПроверяемоеЗначение) Тогда 
ВызватьИсключение ТекстОшибки;
КонецЕсли;
8. katrineKA 27.09.17 13:22 Сейчас в теме
Вопрос в том же. В процедуре Печать, вставляю Сообщение об ошибки, но вместе с ним выходит ошибка печатной формы.
Подскажите как правильно остановить печать.

Эта часть не работает.
Если Не ЗначениеЗаполнено(ПроверяемоеЗначение) Тогда 
ВызватьИсключение ТекстОшибки;
КонецЕсли;
9. katrineKA 27.09.17 13:28 Сейчас в теме
А в идеале хотелось бы передать управление в модуль конфигурации, на встроенный механизм сообщения об ошибке.
Вот сюда - УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов(ОписаниеПроцедурыЗавершения, СписокДокументов)
12. user633533_encantado 12 27.09.17 13:36 Сейчас в теме
(9) У вас в процедуру печать передаются объекты. Проверяйте их на условие, если не проходят то делайте возврат из процедуры.
14. katrineKA 27.09.17 13:40 Сейчас в теме
(12) да с возвратом, в целом работает... Спасибо.
Но все таки хотелось бы, вызов встроенного механизма.
15. user633533_encantado 12 27.09.17 13:42 Сейчас в теме
(14) Что значит "встроенного" ?

Проверяете условие, если оно не проходит оповещаете пользователя и не выводите на печать. Чего же "еще тебе надобно, старче" ?
17. katrineKA 27.09.17 14:03 Сейчас в теме
(15) УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ТОРГ12", "ТОРГ-12 накладная (без проведения)", Табдок);
Это и используется.

Идея, заменить встроенную печатную форму на внешнюю.
Внешняя печформа должна проверять у пользователя наличие роли, можно ему печатать без проведения или нет. (есть соответсвующая роль)

В кофигурации есть КомандаПечати.ПроверкаПроведенияПередПечатью, она всегда стоит Истина.

А мне получается нужно в процедуре Печать, сделать проверку на роль, и если ее нет, то Доп параметр ПроверкаПроведенияПередПечатью = Истина перейти сюда:
Процедура ВыполнитьПодключаемуюКомандуПечатиПодготовкаОбъектовПечати(ДополнительныеПараметры)
	
	ОбъектыПечати = ДополнительныеПараметры.Источник;
	Если ТипЗнч(ОбъектыПечати) <> Тип("Массив") Тогда
		ОбъектыПечати = ОбъектыПечати(ОбъектыПечати);
	КонецЕсли;
	
	Если ОбъектыПечати.Количество() = 0 Тогда
		ВызватьИсключение НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'")
	КонецЕсли;
	
	Если ДополнительныеПараметры.ОписаниеКоманды.ТипыОбъектовПечати.Количество() <> 0 Тогда // требуется проверка типа
		ЕстьПечатаемыеОбъекты = Ложь;
		Для Каждого ОбъектПечати Из ОбъектыПечати Цикл
			Если ДополнительныеПараметры.ОписаниеКоманды.ТипыОбъектовПечати.Найти(ТипЗнч(ОбъектПечати)) <> Неопределено Тогда
				ЕстьПечатаемыеОбъекты = Истина;
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		Если Не ЕстьПечатаемыеОбъекты Тогда
			ТекстСообщения = УправлениеПечатьюВызовСервера.СообщениеОПредназначенииКомандыПечати(ДополнительныеПараметры.ОписаниеКоманды.ТипыОбъектовПечати);
			ПоказатьПредупреждение(, ТекстСообщения);
			Возврат;
		КонецЕсли;
	КонецЕсли;
	
	Если ДополнительныеПараметры.ОписаниеКоманды.ПроверкаПроведенияПередПечатью Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьПодключаемуюКомандуПечатиПодключениеРасширенияРабо­тыСФайлами", ЭтотОбъект, ДополнительныеПараметры);
		УправлениеПечатьюКлиент.ПроверитьПроведенностьДокументов(ОписаниеОповещения, ОбъектыПечати, ДополнительныеПараметры.Форма);
		Возврат;
	КонецЕсли;
	
	ВыполнитьПодключаемуюКомандуПечатиПодключениеРасширенияРабот­ыСФайлами(ОбъектыПечати, ДополнительныеПараметры);
	
КонецПроцедуры
Показать


Все для того, что бы было красивое системное сообщение с предложением провести не проведенный документ.... как-то так
18. user633533_encantado 12 27.09.17 14:08 Сейчас в теме
Вам наверное нужно сделать вызов клиентского метода. Создать форму для внешней обработки и перенести печать туда..
А уже в форме вести с пользователем диалог.
19. katrineKA 27.09.17 15:09 Сейчас в теме
(18) Если не сложно помогите с формой.
в модуле формы:
&НаКлиенте
Процедура Печать(ИмяКоманды, МассивОбъектов, ПараметрыПечати = неопределено, КоллекцияПечатныхФорм = неопределено, ОбъектыПечати = неопределено, ПараметрыВывода = неопределено) Экспорт
	ВыполняемаяКоманда = Параметры;   

	ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
	ПараметрыОткрытия.ИсточникДанных    = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;
	ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
	ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ВыполняемаяКоманда.ИдентификаторКоманды;

	ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ВыполняемаяКоманда.ОбъектыНазначения;

	ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
			 
КонецПроцедуры // Печать()
Показать


Когда указываю в форме кнопку и команду с вызовом это процедуры выдает ошибку: Недопустимое значение параметра ПараметрКоманды при вызове метода УправлениеПечатьюКлиент.ВыполнитьКомандуПечати.
Ожидалось: Массив, ЛюбаяСсылка.
Передано: Не определено
20. user633533_encantado 12 27.09.17 15:18 Сейчас в теме
(19)
&НаКлиенте
Процедура Печать(ИмяМакета, ОбъектыНазначения) Экспорт

		   
    ОписаниеОповещения = Новый ОписаниеОповещения("ПечатьДокумента",ЭтаФорма);	
	
    //тут должен оказаться код, который взаимодействует с пользователем
   //задает вопросы, проверяет документы, проводит
   //а затем запускает бсп печати

	
КонецПроцедуры

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

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