Подcкажите, как автоматически вывести печатную форму Счета?
Если внешняя команда ввода на основание. Всё ок. Счет на основании создается, открывается и записывается. А мне по ТЗ нужно, чтобы сразу открывалась печатная форма счета.
Вот есть команда ввода на основании
Процедура ПечатьНаСервере()
Но при этом выдается ошибка Метод объекта не обнаружен Печать()
Подскажите, где ошибаюсь?
Вот есть команда ввода на основании
&НаКлиенте
Процедура ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты ) Экспорт
//переберем все выбранные документы на основании которых будут созданые новые документ
Для каждого Элемент Из ОбъектыНазначенияМассив Цикл
ФормаДок = ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта");
ДанныеФормы = ФормаДок.Объект;
//мы помещаем объект формы в переменную, так как должны передать ее в процедуру на сервере,
//где нельзя изменять объект формы, зато можно править переменную, содержащую его
Отказ = Ложь;
СоздатьНовыйДокумент(Элемент,ДанныеФормы, Отказ);
Если Отказ Тогда
ПоказатьОповещениеПользователя("Дата расчета в Букинге меньше текущей даты!",ПолучитьНавигационнуюСсылку(ФормаДок),"Проверьте дату расчета в Букинге", БиблиотекаКартинок.ВосклицательныйЗнакКрасный);
возврат;
КонецЕсли;
//после выполнения процедура на сервере мы получаем измененную переменную данныеформы
//которую необходимо передать в уже созданную нами форму
КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
//открываем результат выполнения обработки
ФормаДок.Открыть();
ФормаДок.Записать();
КоллекцияПечатныхФормМассив = ПечатьНаСервере(ФормаДок.Объект);
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив)
КонецЦикла;
КонецПроцедуры
ПоказатьПроцедура ПечатьНаСервере()
&НаСервере
Функция ПечатьНаСервере(Объект)
ДокОбъект = ДанныеФормыВЗначение(Объект,ТИП("ДокументОбъект.СчетНаОплатуПокупателю"));
//Сообщить (ТИПЗНЧ(ДокОбъект));
Массив = Новый Массив;
Массив.Добавить(ДокОбъект);
ИмяПечФормы="СчетЗаказ";
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИмяПечФормы);
ПараметрыВывода = Новый Структура;
ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Истина);
ПараметрыВывода.Вставить("ПараметрыОтправки", Неопределено);
ПараметрыВывода.Вставить("ИмяФайлаПечатнойФормы", "СчетЗаказ");
ДокОбъект.Печать(Массив, КоллекцияПечатныхФорм, Новый СписокЗначений,ПараметрыВывода);
КоллекцияПечатныхФормМассив = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);
Возврат КоллекцияПечатныхФормМассив;
КонецФункции
ПоказатьНо при этом выдается ошибка Метод объекта не обнаружен Печать()
Подскажите, где ошибаюсь?
Прикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Получаю на сервере ссылку на документ, форма которого в данный момент открыта и пытаюсь выполнить команду печати.
И вообще не понимаю, почему программа ругается
Какое поле я меняю???
&НаКлиенте
Процедура ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты ) Экспорт
//переберем все выбранные документы на основании которых будут созданые новые документ
Для каждого Элемент Из ОбъектыНазначенияМассив Цикл
ФормаДок = ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта");
ДанныеФормы = ФормаДок.Объект;
//мы помещаем объект формы в переменную, так как должны передать ее в процедуру на сервере,
//где нельзя изменять объект формы, зато можно править переменную, содержащую его
Отказ = Ложь;
СоздатьНовыйДокумент(Элемент,ДанныеФормы, Отказ);
Если Отказ Тогда
ПоказатьОповещениеПользователя("Дата расчета в Букинге меньше текущей даты!",ПолучитьНавигационнуюСсылку(ФормаДок),"Проверьте дату расчета в Букинге", БиблиотекаКартинок.ВосклицательныйЗнакКрасный);
возврат;
КонецЕсли;
//после выполнения процедура на сервере мы получаем измененную переменную данныеформы
//которую необходимо передать в уже созданную нами форму
КопироватьДанныеФормы(ДанныеФормы, ФормаДок.Объект);
//открываем результат выполнения обработки
ФормаДок.Открыть();
ФормаДок.Записать();
//КоллекцияПечатныхФормМассив = ПечатьНаСервере(ФормаДок.Объект);
//УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФормМассив);
_МассивОбъектов = ПолучитьСсылкуНаСервере(ФормаДок.Объект);
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("Организация", ФормаДок.Организация);
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Обработка.ПечатьСчетаНаОплату", "СчетЗаказ", _МассивОбъектов,
ФормаДок, ПараметрыПечати);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьСсылкуНаСервере(_Объект)
ДокОбъект = ДанныеФормыВЗначение(_Объект,ТИП("ДокументОбъект.СчетНаОплатуПокупателю"));
_МассивОбъектов = Новый Массив(1);
_МассивОбъектов[0] = ДокОбъект.Ссылка;
возврат _МассивОбъектов;
КонецФункции // КомандаПечати()
ПоказатьИ вообще не понимаю, почему программа ругается
{ВнешняяОбработка.АвтоСборникИзЕвропы.Форма.Форма.Форма(32)}: Ошибка при установке значения атрибута контекста (Объект)
_МассивОбъектов = ПолучитьСсылкуНаСервере(ФормаДок.Объект);
по причине:
Нельзя изменять поле, содержащее объект данных формы
_МассивОбъектов = ПолучитьСсылкуНаСервере(ФормаДок.Объект);
по причине:
Нельзя изменять поле, содержащее объект данных формы
Какое поле я меняю???
Прикрепленные файлы:
(6)
Разобрался. Надо бы
определять функцию так
Иначе при возвращение платформа думает что параметр меняется и ругается...
&НаСервере
Функция ПолучитьСсылкуНаСервере(_Объект)
ДокОбъект = ДанныеФормыВЗначение(_Объект,ТИП("ДокументОбъект.СчетНаОплатуПокупателю"));
_МассивОбъектов = Новый Массив(1);
_МассивОбъектов[0] = ДокОбъект.Ссылка;
возврат _МассивОбъектов;
КонецФункции // КомандаПечати()
Функция ПолучитьСсылкуНаСервере(_Объект)
ДокОбъект = ДанныеФормыВЗначение(_Объект,ТИП("ДокументОбъект.СчетНаОплатуПокупателю"));
_МассивОбъектов = Новый Массив(1);
_МассивОбъектов[0] = ДокОбъект.Ссылка;
возврат _МассивОбъектов;
КонецФункции // КомандаПечати()
Разобрался. Надо бы
определять функцию так
&НаСервере
Функция ПолучитьСсылкуНаСервере(Знач _Объект)
Иначе при возвращение платформа думает что параметр меняется и ругается...
(3)
А можно спросить как инциировать в форме выполнение команды печати
Вот в модуле менеджера счета добавляется команда,
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Обработка.ПечатьСчетаНаОплату";
КомандаПечати.Идентификатор = "СчетЗаказ";
КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
КомандаПечати.Обработчик = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
КомандаПечати.Порядок = 10;
а мне нужно в уже открытой форме записанного документа выполнить эту команду...
Документы.СчетНаОплатуПокупателю.Печать(....)
А можно спросить как инциировать в форме выполнение команды печати
Вот в модуле менеджера счета добавляется команда,
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Обработка.ПечатьСчетаНаОплату";
КомандаПечати.Идентификатор = "СчетЗаказ";
КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
КомандаПечати.Обработчик = "УправлениеПечатьюБПКлиент.ВыполнитьКомандуПечати";
КомандаПечати.Порядок = 10;
а мне нужно в уже открытой форме записанного документа выполнить эту команду...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот