Имя: Пароль:
1C
1С v8
БП 3.0: внешняя печатная форма - открыть форму из формы объекта назначения и пер
0 Kleo
 
09.12.13
09:15
Здравствуйте!

Необходимо в БП 3.0 сделать внешнюю печатную форму к документу "Счет на оплату покупателю", при нажатии на имя печ.формы - открывается форма обработки печатной формы. это все работает. но никак не могу передать значение ОбъектаНазначения в модуль формы, чтобы использовать этот параметр в дальнейшем для запроса.


в модуле объекта у меня:


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



в модуле формы:


&НаКлиенте
Процедура ПечатьТТН(Команда)
    // Вставить содержимое обработчика.
    //Сообщение = Новый СообщениеПользователю;
    //Сообщение.Текст = "Hello Word (из формы обработки)";
    //Сообщение.Сообщить();
    
    
    Печать(ИдентификаторКоманды, ОбъектыНазначения);
    Сообщить("Док" + Объект.СсылкаНаОбъект);
КонецПроцедуры

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


так вот ссылку на объект в первой процедуре не определяет, а во второй видет, что это счет на оплату. как передать док. Счет на оплату в первую процедуру? ПечатьТТН - это кнопка на форме внешней печатной формы
1 Fedot200
 
09.12.13
09:25
А если не так Сообщить("Док" + Объект.СсылкаНаОбъект);

а вот так

Сообщить("Док" + ОбъектыНазначения[0].Ссылка);

что будет?
2 Мимохожий Однако
 
09.12.13
09:30
Есть примеры на инфостарте и в демо БСП.
3 Kleo
 
09.12.13
09:42
(1) без разницы. в процедуре Печать обработка понимает, что такое ОбъектыНазначения, а в ПечатьТТН - нет
4 Kleo
 
09.12.13
09:44
(2) там есть, но без открытия формы. нашла на инфостате, что нужно наоборот паараметры формы передатьв  модуль объекта для процедуры печати, но непонятно в конце, какую все-таки форму открывают. форму документа?
5 Kleo
 
09.12.13
10:20
(2) скачала БСП и где смотреть примеры?
6 Kleo
 
09.12.13
10:23
нашла. там есть демо обработка внешней печатной формы, но без открытия доп.формы обработки
7 Kleo
 
09.12.13
10:27
подскажите, как быть? есть внешняя обработка печатной формы. есть у этой обаботки форма. все работает, она открывается. на этой форме есть реквизиты. так вот потом есть кнопка на этой форме, после нажатия на которую должна сформировать печатная форма. это все я знаю, как сделать. обычную печатную форму делала. проблема в том, что после открытия формы обработки не достпно значение структуры данных ОбъектыНазначения. как их вытащить.
8 Kleo
 
09.12.13
11:17
Получилось! Разоблась! Спасибо! Помогла обработка заполнения из БСП.

Сделала в модуле формы внешней обработки следующий код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Для Каждого ЭлементОбъектыНазначения Из Параметры.ОбъектыНазначения Цикл
        ОбъектыНазначения.Добавить(ЭлементОбъектыНазначения);
    КонецЦикла;
    
    ИдентификаторКоманды = Параметры.ИдентификаторКоманды;
    
КонецПроцедуры


&НаСервере
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения)Экспорт
    Сообщить("Привет");
    Для каждого ОбъектНазначение из ОбъектыНазначения Цикл
        Сообщить("док "+ОбъектНазначение);
    КонецЦикла;
КонецПроцедуры    

&НаКлиенте
Процедура ПечатьТТН(Команда)
    
    ОбъектыНазначенияМассив = ОбъектыНазначения.ВыгрузитьЗначения();
    
    ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив);
       
КонецПроцедуры


А до этого в параметры формы добавила три параметра:

1) ДополнительнаяОбработкаСсылка - тип: СправочникСсылка.ДополнительныеОтчетыИОбработки (ключевой параметр)

2) ИдентификаторКоманды  Тип - Строка

3) ОбъектыНазначения - Тип - Произвольный

Затем в реквизитах формы добавляется два реквизита:
1) ИдентификаторКоманды  Тип - Строка
2) ОбъектыНазначения - Тип - Список значений


все в команде Выполнить команду я получила объект назначения!!! а дальше запрос и вывод печатной формы!
Ошибка? Это не ошибка, это системная функция.