|
внешняя печатная форма | ☑ | ||
---|---|---|---|---|
0
4esz
20.02.13
✎
13:40
|
Здорово народ.
подскажите как во внешней печатной форме документа обратиться к Макету? есть док Счет создаю обработку СпецификацияПоСчетуВнПечать, в ней есть свой макет и с именем ПФ_MXL_СпецификацияСчета в модуле объекта этой внешней обработки есть процедура Печать в которой пытаюсь получить Макет так: //Макет = УправлениеПечатью.ПолучитьМакет("Документ.СчетНаОплату.ПФ_MXL_" + ИмяМакета); Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("ПФ_MXL_" + ИмяМакета); //Макет = УправлениеПечатью.ПолучитьМакет(ЭтотОбъект+".ПФ_MXL_" + ИмяМакета); // //Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_"+ ИмяМакета); ни один из вариантов не срабатывает подозреваю что как то не так вызываю Макет либо его надо располагать не в этой обработке. И еще вопрос как можно посмотреть отладчиком подключенную внешнюю обработку? P.S. за основу при написании обработки брал вот эту ссылу http://www.1c-pro.ru/topic26882.html |
|||
1
1Сергей
20.02.13
✎
13:42
|
ПолучитьМакет("ПФ_MXL_СпецификацияСчета");
|
|||
2
4esz
20.02.13
✎
13:49
|
не работает
машина на долго уходит в себя после чего выдает следующее {ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(146)}: В обработчике печати не был сформирован табличный документ для: СпецификацияСчета ВызватьИсключение(ТекстСообщенияОбОшибке); |
|||
3
Wobland
20.02.13
✎
13:50
|
(2) а макет получается
|
|||
4
4esz
20.02.13
✎
13:53
|
(3)
вот на этой процедурине долго висит, отладчиком ничего увидеть не могу ВнешняяОбработкаОбъект.Печать( ПараметрыИсточника.ОбъектыНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода ); вот здесь в переменной Стр есть только имя внешней печатной формы, самой таблицы нет // Проверим, все ли макеты были сформированы Для Каждого Стр Из КоллекцияПечатныхФорм Цикл |
|||
5
skillhoster
20.02.13
✎
13:54
|
про отладку:
в некоторых конфигурациях в справочнике "Внешние печатные формы" есть возможность указать путь к внешней обработке, т.е. случай, когда обработку можно хранить не в информационной базе, например в Рарус Альфа-Авто так. В этом случае точку останова можно расположить прямо в модуле объекта отчета и она сработает. В некоторых, например в КА, внешнюю обработку надо именно загружать в информационную базу, но обычно в таких обработках на форму выведен реквизит - Объект, в котором можно выбрать Документ, который распечатывается, и в таком случае отладка сводится к открытию самой обработки в конфигураторе и в предприятии. как-то так. |
|||
6
skillhoster
20.02.13
✎
13:56
|
(2) это исключение выдается при любой ошибке в модуле объекта, не факт что ругается на получение макета
|
|||
7
Rovan
гуру
20.02.13
✎
13:56
|
(4) да у тебя похоже серверный вариант с выключенной отладкой на сервере
|
|||
8
4esz
20.02.13
✎
13:59
|
(7) как включить отладку?
(6) щас попробую все остальное закоментить |
|||
9
Wobland
20.02.13
✎
14:02
|
(8) перезапустить сервер с ключом -debug. это в реестре
|
|||
10
skillhoster
20.02.13
✎
14:06
|
покажи обработку. на какой конфе ее тестируешь?
|
|||
11
4esz
20.02.13
✎
14:09
|
(10) конфа унф
вот так оставил кусок печати все равно не работает // Сформировать печатные формы объектов // // ВХОДЯЩИЕ: // ИменаМакетов - Строка - Имена макетов, перечисленные через запятую // МассивОбъектов - Массив - Массив ссылок на объекты которые нужно распечатать // ПараметрыПечати - Структура - Структура дополнительных параметров печати // // ИСХОДЯЩИЕ: // КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы // ПараметрыВывода - Структура - Параметры сформированных табличных документов // Процедура Печать(ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина; ИмяМакета = "СпецификацияСчета"; //ы н Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СпецификацияСчета") Тогда //УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "СчетНАШ", "Счет на оплату (НАШ)", ПечатьСчетНаОплатуНАШ(ОбъектыПечати, "СчетНАШ")); ПечатьСпецификацияСчета(ОбъектыПечати, ИмяМакета); КонецЕсли; //ы к КонецПроцедуры Функция ПечатьСпецификацияСчета(ОбъектыПечати, ИмяМакета) ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + ИмяМакета + "_" + ИмяМакета; Макет = ПолучитьМакет("ПФ_MXL_" + ИмяМакета); ОбластьМакета = Макет.ПолучитьОбласть("Примечание"); ТабличныйДокумент.Вывести(ОбластьМакета); ТабличныйДокумент.АвтоМасштаб = Истина; Возврат ТабличныйДокумент; КонецФункции // ПечатнаяФорма() |
|||
12
Wobland
20.02.13
✎
14:11
|
(11) почему ж? работает. формирует и выдаёт тебе ТабДок. посмотреть на него хочешь? покажи
|
|||
13
4esz
20.02.13
✎
14:11
|
(9)у меня файловый вариант, отладку запускаю по F5
|
|||
14
4esz
20.02.13
✎
14:14
|
(11)я подключаю обработку как "Дополнительная печатная форма"
ничего не выводится на экран, 1С долго висит потом вываливает на экран ошибку которую писал в (2) |
|||
15
Wobland
20.02.13
✎
14:15
|
(14) в отладку. нарисуй себе форму с кнопкой, по кнопке колдуй печать. отлаживать будет проще
|
|||
16
skillhoster
20.02.13
✎
14:19
|
советую тебе для отладки в Печать закоментировать все, оставить только
ПечатьСпецификацияСчета(ОбъектыПечати, "СпецификацияСчета"); А в ПечатьСпецификацияСчета оставить ТабличныйДокумент = Новый ТабличныйДокумент; Макет = ПолучитьМакет("ПФ_MXL_" + ИмяМакета); //можешь здесь скопировать впрямую имя макета? может в названии там М русская попалась? ОбластьМакета = Макет.ПолучитьОбласть("Примечание");//точно там эта область есть? ТабличныйДокумент.Вывести(ОбластьМакета); Возврат ТабличныйДокумент; |
|||
17
skillhoster
20.02.13
✎
14:24
|
||||
18
ИсчадиеADO
20.02.13
✎
14:35
|
в УНФ есть такая строчка
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ПараметрыИсточника.ИдентификаторКоманды); Соответственно, когда пользуемся процедурой УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ТутДолжноБытьСтрогоеИмяПечФормы", "парам парам пурум", ТД); |
|||
19
ИсчадиеADO
20.02.13
✎
14:35
|
:)
|
|||
20
ИсчадиеADO
20.02.13
✎
14:35
|
т.е. дело не в макете
|
|||
21
4esz
21.02.13
✎
09:34
|
Всем спасибо
если вдруг кому то пригодится вот так все заработало Процедура Печать(ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ИмяМакета = "ПФ_MXL_СпецификацияСчета"; Макет = ЭтотОбъект.ПолучитьМакет(ИмяМакета); ТабличныйДокумент = ПечатьСпецификацияСчета(ОбъектыПечати, Макет); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, "СпецификацияСчета", ТабличныйДокумент); КонецПроцедуры Функция ПечатьСпецификацияСчета(ОбъектыПечати, Макет) ТабличныйДокумент = Новый ТабличныйДокумент; ОбластьМакета = Макет.ПолучитьОбласть("Примечание"); ТабличныйДокумент.Вывести(ОбластьМакета); ТабличныйДокумент.АвтоМасштаб = Истина; Возврат ТабличныйДокумент; КонецФункции // ПечатнаяФорма() |
|||
22
4esz
22.02.13
✎
10:06
|
Вопрос оказался значительно коварнее чем думал
выше приведенный код работает нормально. Решил написать Функцию ПечатьСпецификацияСчета(ОбъектыПечати, Макет) как положено с вводом всего чего нужно. Написал и тут грабли вот как выглядит код(извиняюсь что длинно но иначе сложно будет объяснить в чем грабли): Функция Печать(ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ИмяМакета = "ПФ_MXL_СпецификацияСчета"; Макет = ЭтотОбъект.ПолучитьМакет(ИмяМакета); ТабличныйДокумент = ПечатьСпецификацияСчета(ОбъектыПечати, ИмяМакета, Макет); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИмяМакета, "СпецификацияСчета", ТабличныйДокумент); Возврат ТабличныйДокумент КонецФункции Функция ПечатьСпецификацияСчета(ОбъектыПечати, ИмяМакета, Макет) //ТабличныйДокумент = Новый ТабличныйДокумент; //ОбластьМакета = Макет.ПолучитьОбласть("Примечание"); //ТабличныйДокумент.Вывести(ОбластьМакета); //Возврат ТабличныйДокумент ТабличныйДокумент = Новый ТабличныйДокумент; Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | СчетНаОплату.Ссылка КАК Ссылка, | СчетНаОплату.СуммаВключаетНДС КАК СуммаВключаетНДС, | СчетНаОплату.ВалютаДокумента КАК ВалютаДокумента, | СчетНаОплату.Дата КАК ДатаДокумента, | СчетНаОплату.Номер КАК Номер, | СчетНаОплату.БанковскийСчет КАК БанковскийСчет, | СчетНаОплату.Контрагент КАК Контрагент, | СчетНаОплату.Организация КАК Организация, | СчетНаОплату.Организация.Префикс КАК Префикс, | СчетНаОплату.Запасы.( | ВЫБОР | КОГДА (ВЫРАЗИТЬ(СчетНаОплату.Запасы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000))) = """" | ТОГДА СчетНаОплату.Запасы.Номенклатура.Наименование | ИНАЧЕ ВЫРАЗИТЬ(СчетНаОплату.Запасы.Номенклатура.НаименованиеПолное КАК СТРОКА(1000)) | КОНЕЦ КАК Запас, | Номенклатура.Артикул КАК Артикул, | ЕдиницаИзмерения КАК ЕдиницаИзмерения, | Цена КАК Цена, | Сумма КАК Сумма, | СуммаНДС КАК СуммаНДС, | Количество КАК Количество, | Характеристика, | Содержание, | ПроцентСкидкиНаценки, | ВЫБОР | КОГДА СчетНаОплату.Запасы.ПроцентСкидкиНаценки <> 0 | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК ЕстьСкидка, | НомерСтроки КАК НомерСтроки | ), | СчетНаОплату.ПлатежныйКалендарь.( | ПроцентОплаты, | СуммаОплаты, | СуммаНДСОплаты | ) |ИЗ | Документ.СчетНаОплату КАК СчетНаОплату |ГДЕ | СчетНаОплату.Ссылка В(&МассивОбъектов) | |УПОРЯДОЧИТЬ ПО | Ссылка, | НомерСтроки"; Запрос.УстановитьПараметр("МассивОбъектов", ОбъектыПечати); Шапка = Запрос.Выполнить().Выбрать(); ПервыйДокумент = Истина; //Пока Шапка.Следующий() Цикл // Если Не ПервыйДокумент Тогда // ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); // КонецЕсли; // ПервыйДокумент = Ложь; // // НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; // // ВыборкаСтрокЗапасы = Шапка.Запасы.Выбрать(); // //ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_" + ИмяМакета + "_" + ИмяМакета; // // СведенияОбОрганизации = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(Шапка.Организация, Шапка.ДатаДокумента, ,Шапка.БанковскийСчет); // СведенияОбКонтрагенте = УправлениеНебольшойФирмойСервер.СведенияОЮрФизЛице(Шапка.Контрагент, Шапка.ДатаДокумента, ,); // ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокС"); //// // ОбластьМакета.Параметры.ПриложениеСтр1 = " Приложение № _____ от " + Формат(Шапка.ДатаДокумента, "ДФ=""dd MMMM yyyy"""); // ОбластьМакета.Параметры.ПриложениеСтр2 = " к договору № _____ от _____________"; // ОбластьМакета.Параметры.ПриложениеСтр3 = " между "+СведенияОбКонтрагенте.ПолноеНаименование; // ОбластьМакета.Параметры.ПриложениеСтр4 = " и "+СведенияОбОрганизации.ПолноеНаименование; //// //// Если ЗначениеЗаполнено(СведенияОбОрганизации.Банк) Тогда //// ОбластьМакета.Параметры.БанкПолучателяПредставление = СведенияОбОрганизации.Банк.Наименование + " " + СведенияОбОрганизации.Банк.Город; //// КонецЕсли; //// ОбластьМакета.Параметры.ИНН = СведенияОбОрганизации.ИНН; //// ОбластьМакета.Параметры.КПП = СведенияОбОрганизации.КПП; //// ОбластьМакета.Параметры.ПредставлениеПоставщика = СведенияОбОрганизации.ПолноеНаименование; //// ОбластьМакета.Параметры.БИКБанкаПолучателя = СведенияОбОрганизации.БИК; //// ОбластьМакета.Параметры.СчетБанкаПолучателяПредставление = СведенияОбОрганизации.КоррСчет; //// ОбластьМакета.Параметры.СчетПолучателяПредставление = СведенияОбОрганизации.НомерСчета; //// //ы н //// ОбластьМакета.Параметры.Адрес = СведенияОбОрганизации.ЮридическийАдрес; //// ОбластьМакета.Параметры.Телефоны = СведенияОбОрганизации.Телефоны; //// //ы к // ТабличныйДокумент.Вывести(ОбластьМакета); //// //// Если Шапка.ДатаДокумента < Дата('20110101') Тогда //// НомерДокумента = УправлениеНебольшойФирмойСервер.ПолучитьНомерНаПечать(Шапка.Номер, Шапка.Префикс); //// Иначе //// НомерДокумента = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Шапка.Номер, Истина, Истина); //// КонецЕсли; //// // ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); // ОбластьМакета.Параметры.ТекстЗаголовка = "СПЕЦИФИКАЦИЯ № ____ "; //// + НомерДокумента //// + " от " //// + Формат(Шапка.ДатаДокумента, "ДФ=""dd MMMM yyyy"""); //// // ТабличныйДокумент.Вывести(ОбластьМакета); //// //// ОбластьМакета = Макет.ПолучитьОбласть("Поставщик"); //// ОбластьМакета.Параметры.ПредставлениеПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"); //// ТабличныйДокумент.Вывести(ОбластьМакета); //// //// ОбластьМакета = Макет.ПолучитьОбласть("Покупатель"); //// ОбластьМакета.Параметры.ПредставлениеПолучателя = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбКонтрагенте, "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"); //// ТабличныйДокумент.Вывести(ОбластьМакета); // ЕстьСкидки = Шапка.Запасы.Выгрузить().Итог("ЕстьСкидка") <> 0; // // Если ЕстьСкидки Тогда // //вывлдим без учета скидок суммы как цена*Количество // ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицыСоСкидкой"); // ТабличныйДокумент.Вывести(ОбластьМакета); // ОбластьМакета = Макет.ПолучитьОбласть("СтрокаСоСкидкой"); // Иначе // ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы"); // ТабличныйДокумент.Вывести(ОбластьМакета); // ОбластьМакета = Макет.ПолучитьОбласть("Строка"); // КонецЕсли; // // Сумма = 0; // СуммаНДС = 0; // Количество = 0; // Пока ВыборкаСтрокЗапасы.Следующий() Цикл // // Количество = Количество + 1; // ОбластьМакета.Параметры.Заполнить(ВыборкаСтрокЗапасы); // ОбластьМакета.Параметры.НомерСтроки = Количество; // // Если ЗначениеЗаполнено(ВыборкаСтрокЗапасы.Содержание) Тогда // ОбластьМакета.Параметры.Запас = ВыборкаСтрокЗапасы.Содержание; // Иначе // ОбластьМакета.Параметры.Запас = УправлениеНебольшойФирмойСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаСтрокЗапасы.Запас, // ВыборкаСтрокЗапасы.Характеристика, ВыборкаСтрокЗапасы.Артикул); // КонецЕсли; // // Если ЕстьСкидки Тогда // Если ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки = 100 Тогда // Скидка = ВыборкаСтрокЗапасы.Цена * ВыборкаСтрокЗапасы.Количество; // ОбластьМакета.Параметры.Скидка = Скидка; // ОбластьМакета.Параметры.СуммаБезСкидки = Скидка; // ИначеЕсли ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки = 0 Тогда // //ОбластьМакета.Параметры.Скидка = 0; // //ОбластьМакета.Параметры.СуммаБезСкидки = ВыборкаСтрокЗапасы.Сумма; // Иначе // //Скидка = ВыборкаСтрокЗапасы.Сумма * ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки / (100 - ВыборкаСтрокЗапасы.ПроцентСкидкиНаценки); // //ОбластьМакета.Параметры.Скидка = Скидка; // //ОбластьМакета.Параметры.СуммаБезСкидки = ВыборкаСтрокЗапасы.Сумма + Скидка; // ОбластьМакета.Параметры.Цена = ВыборкаСтрокЗапасы.Сумма/ВыборкаСтрокЗапасы.Количество; // КонецЕсли; // КонецЕсли; // // ТабличныйДокумент.Вывести(ОбластьМакета); // // Сумма = Сумма + ВыборкаСтрокЗапасы.Сумма; // СуммаНДС = СуммаНДС + ВыборкаСтрокЗапасы.СуммаНДС; // // КонецЦикла; // // ОбластьМакета = Макет.ПолучитьОбласть("Итого"); // ОбластьМакета.Параметры.Всего = УправлениеНебольшойФирмойСервер.ФорматСумм(Сумма); // ТабличныйДокумент.Вывести(ОбластьМакета); // // ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС"); // Если СуммаНДС = 0 Тогда // ОбластьМакета.Параметры.НДС = "Без налога (НДС)"; // ОбластьМакета.Параметры.ВсегоНДС = "-"; // Иначе // ОбластьМакета.Параметры.НДС = ?(Шапка.СуммаВключаетНДС, "В том числе НДС:", "Сумма НДС:"); // ОбластьМакета.Параметры.ВсегоНДС = УправлениеНебольшойФирмойСервер.ФорматСумм(СуммаНДС); // КонецЕсли; // // ТабличныйДокумент.Вывести(ОбластьМакета); // ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью"); // СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС); // ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего наименований " // + Строка(Количество) // + ", на сумму " // + УправлениеНебольшойФирмойСервер.ФорматСумм(СуммаКПрописи, // Шапка.ВалютаДокумента); // // ОбластьМакета.Параметры.СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаКПрописи, // Шапка.ВалютаДокумента); // // ТабличныйДокумент.Вывести(ОбластьМакета); ОбластьМакета = Макет.ПолучитьОбласть("Примечание"); ТабличныйДокумент.Вывести(ОбластьМакета); // // ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета"); // // Руководители = УправлениеНебольшойФирмойСервер.ОтветственныеЛицаОрганизационнойЕдиницы(Шапка.Организация, Шапка.ДатаДокумента); // ОбластьМакета.Параметры.ФИОРуководителя = Руководители.ФИОРуководителя; // ОбластьМакета.Параметры.РуководительДолжность = Руководители.РуководительДолжность; // ОбластьМакета.Параметры.Поставщик = СведенияОбОрганизации.Представление; // // ТабличныйДокумент.Вывести(ОбластьМакета); // //УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка); // //КонецЦикла; ТабличныйДокумент.АвтоМасштаб = Истина; Возврат ТабличныйДокумент; КонецФункции // ПечатнаяФорма() в таком виде он работает и все выводит нормально,но стоит раскомментировать строку //Пока Шапка.Следующий() Цикл и при этом всегда выводится сообщение "Печатная форма недоступна" в чем причина ??? причем если эту же обработину выполнять не как подключенную внешнюю печатную форму, а просто открывать как внешнюю обработку то все выводится нормально. |
|||
23
4esz
22.02.13
✎
10:48
|
up
|
|||
24
4esz
22.02.13
✎
15:55
|
up1
|
|||
25
4esz
25.02.13
✎
09:18
|
ну и еще разик up
|
|||
26
4esz
25.02.13
✎
11:40
|
вопрос решен
если кому то интересно неправильно была забита последовательность параметров Функции Печать. Должно быть вот так Функция Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати,ПараметрыВывода) Экспорт первым параметром должен обязательно идти массив объектов которые предполагается напечатать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |