Подcкажите, как автоматически вывести печатную форму Счета?

1. AndKovalchuk 194 02.06.20 17:16 Сейчас в теме
Если внешняя команда ввода на основание. Всё ок. Счет на основании создается, открывается и записывается. А мне по ТЗ нужно, чтобы сразу открывалась печатная форма счета.

Вот есть команда ввода на основании
&НаКлиенте 
Процедура ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты ) Экспорт
	
	//переберем все выбранные документы на основании которых будут созданые новые документ
	
	Для каждого Элемент Из ОбъектыНазначенияМассив Цикл
	    ФормаДок = ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта");
		
		ДанныеФормы = ФормаДок.Объект;
		
		//мы помещаем объект формы в переменную, так как должны передать ее в процедуру на сервере,
		//где нельзя изменять объект формы,  зато можно править переменную, содержащую его
		
		Отказ = Ложь;		
		СоздатьНовыйДокумент(Элемент,ДанныеФормы, Отказ);
		Если Отказ Тогда
			ПоказатьОповещениеПользователя("Дата расчета в Букинге меньше текущей даты!",ПолучитьНавигационнуюСсылку(ФормаДок),"Проверьте дату расчета в Букинге", БиблиотекаКартинок.ВосклицательныйЗнакКрасный);
			возврат;
		КонецЕсли;	

		
		//после выполнения процедура на сервере мы получаем измененную переменную данныеформы
		//которую необходимо передать в уже созданную нами форму
		
		КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
		
		//открываем результат выполнения обработки
		ФормаДок.Открыть();
		ФормаДок.Записать();
		КоллекцияПечатныхФормМассив = ПечатьНаСервере(ФормаДок.Объект);
        УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив)

	

	КонецЦикла; 

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

Показать


Процедура ПечатьНаСервере()

&НаСервере
Функция ПечатьНаСервере(Объект)
	
ДокОбъект = ДанныеФормыВЗначение(Объект,ТИП("ДокументОбъект.СчетНаОплатуПокупателю"));
	//Сообщить (ТИПЗНЧ(ДокОбъект));

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

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



Показать


Но при этом выдается ошибка Метод объекта не обнаружен Печать()

Подскажите, где ошибаюсь?
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 02.06.20 17:31 Сейчас в теме
(1) Печать() - в модуле объекта ? может в модуле менеджера?
ivan1703; ipoloskov; +2 Ответить
4. user705522_constantin_h 36 02.06.20 21:37 Сейчас в теме
(1)
Но при этом выдается ошибка Метод объекта не обнаружен Печать()

В модуле объекта СчетНаОплатуПокупателю есть процедура Печать()?
6. AndKovalchuk 194 03.06.20 15:44 Сейчас в теме
Получаю на сервере ссылку на документ, форма которого в данный момент открыта и пытаюсь выполнить команду печати.

&НаКлиенте 
Процедура ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты ) Экспорт
	
	//переберем все выбранные документы на основании которых будут созданые новые документ
	
	Для каждого Элемент Из ОбъектыНазначенияМассив Цикл
	    ФормаДок = ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта");
		
		ДанныеФормы = ФормаДок.Объект;
		
		//мы помещаем объект формы в переменную, так как должны передать ее в процедуру на сервере,
		//где нельзя изменять объект формы,  зато можно править переменную, содержащую его
		
		Отказ = Ложь;		
		СоздатьНовыйДокумент(Элемент,ДанныеФормы, Отказ);
		Если Отказ Тогда
			ПоказатьОповещениеПользователя("Дата расчета в Букинге меньше текущей даты!",ПолучитьНавигационнуюСсылку(ФормаДок),"Проверьте дату расчета в Букинге", БиблиотекаКартинок.ВосклицательныйЗнакКрасный);
			возврат;
		КонецЕсли;	

		
		//после выполнения процедура на сервере мы получаем измененную переменную данныеформы
		//которую необходимо передать в уже созданную нами форму
		
		КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
		
		//открываем результат выполнения обработки
		ФормаДок.Открыть();
		ФормаДок.Записать();
		//КоллекцияПечатныхФормМассив = ПечатьНаСервере(ФормаДок.Объект);
		//УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив);
		_МассивОбъектов = ПолучитьСсылкуНаСервере(ФормаДок.Объект);
		
				
		
		ПараметрыПечати = Новый Структура;
		ПараметрыПечати.Вставить("Организация", ФормаДок.Организация);

		УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Обработка.ПечатьСчетаНаОплату", "СчетЗаказ", _МассивОбъектов,
		ФормаДок, ПараметрыПечати);

	КонецЦикла; 

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



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

	возврат _МассивОбъектов;
КонецФункции // КомандаПечати()

Показать


И вообще не понимаю, почему программа ругается

{ВнешняяОбработка.АвтоСборникИзЕвропы.Форма.Форма.Форма(32)}: Ошибка при установке значения атрибута контекста (Объект)
_МассивОбъектов = ПолучитьСсылкуНаСервере(ФормаДок.Объект);
по причине:
Нельзя изменять поле, содержащее объект данных формы


Какое поле я меняю???
Прикрепленные файлы:
7. AndKovalchuk 194 03.06.20 16:23 Сейчас в теме
(6)
&НаСервере
Функция ПолучитьСсылкуНаСервере(_Объект)
ДокОбъект = ДанныеФормыВЗначение(_Объект,ТИП("ДокументОбъект.СчетНаОплатуПокупателю"));

_МассивОбъектов = Новый Массив(1);
_МассивОбъектов[0] = ДокОбъект.Ссылка;

возврат _МассивОбъектов;
КонецФункции // КомандаПечати()


Разобрался. Надо бы
определять функцию так
&НаСервере 
Функция ПолучитьСсылкуНаСервере(Знач _Объект)

Иначе при возвращение платформа думает что параметр меняется и ругается...
3. ivan1703 79 02.06.20 18:58 Сейчас в теме
Документы.СчетНаОплатуПокупателю.Печать(....)

както так надо, к менеджеру обращайтесь
AndKovalchuk; +1 Ответить
5. AndKovalchuk 194 03.06.20 14:45 Сейчас в теме
(3)
Документы.СчетНаОплатуПокупателю.Печать(....)


А можно спросить как инциировать в форме выполнение команды печати

Вот в модуле менеджера счета добавляется команда,

КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Обработка.ПечатьСчетаНаОплату";
КомандаПечати.Идентификатор = "СчетЗаказ";
КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
КомандаПечати.Обработчик = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
КомандаПечати.Порядок = 10;



а мне нужно в уже открытой форме записанного документа выполнить эту команду...
8. N0t_F0und 10 03.06.20 16:26 Сейчас в теме
В форме журнала обычно выведены команды печати
9. AndKovalchuk 194 03.06.20 16:47 Сейчас в теме
Открыть печатную форму получилось. Но теперь надо из формы счета, как то перейти в подчиненную форму табличного документа и там (программно) нажать кнопку "Сохранить". Чешу репу, как это сделать
Прикрепленные файлы:
Оставьте свое сообщение

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