Имя: Пароль:
1C
1С v8
Внешняя обработка. Печать.
0 PiotrLoginov
 
15.03.13
03:42
Здравствуйте всем. Пытаюсь состряпать внешнюю обработку, печатающую информацию о взаиморасчетах с контрагентом. Основной код и макет для печати взял из документа "Сверка взаиморасчетов".

Сделал в форме обработки кнопку "Печать". Ее нажатие вызывает выполнение процедуры Печать в модуле обработки. процедура выполняется без сообщений об ошибках, но ничего не происходит, т.е. табличный документ не выводится. Думаю, проблема в том, что я не правильно обошелся с ЗадатьОбластьПечатиДокумента, т.к. обычно там последним параметром передается ссылка на печатаемый объект ИБ, а в данном случае там пусто - обработка же печатает не записанный объект, а результат собственных вычислений:

ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Неопределено);

Процедура ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылка)
   
   Элемент = Ссылка;
   Если Элемент = Неопределено Тогда
       ИмяОбласти = "Документ_" + Формат(ОбъектыПечати.Количество() + 1, "ЧН=; ЧГ=");
       ОбъектыПечати.Добавить(Ссылка, ИмяОбласти);
   Иначе
       ИмяОбласти = Элемент.Представление;
   КонецЕсли;
   
   НомерСтрокиОкончание = ТабличныйДокумент.ВысотаТаблицы;
   ТабличныйДокумент.Область(НомерСтрокиНачало, , НомерСтрокиОкончание, ).Имя = ИмяОбласти;

КонецПроцедуры
1 PiotrLoginov
 
15.03.13
03:45
Помогите, пожалуйста, уважаемые. Что я делаю не так?
2 Web00001
 
15.03.13
03:56
Для того что бы работала внешняя печатная форма экспортная функция Печать в модуле объекта, должна возвращать табличный документ. Это если ты подключаешь внешнюю печатную форму к какому то объекту. Если ты просто используешь ее как обработку, то метод Показать() призменный к табличному документы как не странно показывает табличный документ.
3 Web00001
 
15.03.13
03:57
*примененный к табличному документу
4 PiotrLoginov
 
15.03.13
03:59
Спасибо огромное, что откликнулись.  Читал я о методе показать, но что-то мне это не помогает. Где надо написать ТабличныйДокумент.Показать();  ?  В конце процедуры Печать(), которая в модуле обработки?
5 PiotrLoginov
 
15.03.13
04:04
В модуле обработки такой код:


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


Функция СформироватьПечатнуюФормуАктСверкиВзаимныхРасчетов(ДанныеДокумента, ОбъектыПечати) Экспорт

   УстановитьПривилегированныйРежим(Истина);
.........
       
   ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Неопределено);

   ТабличныйДокумент.АвтоМасштаб = Истина;
   
   Если ПривилегированныйРежим() Тогда
       УстановитьПривилегированныйРежим(Ложь);
   КонецЕсли;
   
   Возврат ТабличныйДокумент;

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


Ну и далее процедура, приведенная в начале этой темы.
6 Web00001
 
15.03.13
04:04
(4)>>Спасибо огромное, что откликнулись.
Москва спит еще, часиков через 5 тебя закидали бы ответами и без меня.
Показывать надо документ тогда, когда он заполнен, потому что после того как показал, понятное дело заполнять его не имеет смысла.
7 PiotrLoginov
 
15.03.13
04:09
Тогда может быть в модуле формы ?  После того, как будет полностью завершено обращение к процедуре Печать модуля обработки?
8 Web00001
 
15.03.13
04:10
кхм давай сначала
>>Пытаюсь состряпать внешнюю обработку, печатающую информацию о взаиморасчетах с контрагентом
Ты хочешь формировать готовую печатную форму а не свою делаешь?
9 Web00001
 
15.03.13
04:11
У тебя просто используется унверсальный механизм, я не помню, что там зачем идет и что возвращает, что за конфигурация?
10 PiotrLoginov
 
15.03.13
04:13
создаю файлик сверка.epf

добавляю реквизиты, аналогичные тем, что у документа Сверка взаиморасчетов, форму с кнопкой Печать.

В модуле формы пишу обработчик нажатия этой кнопки
11 Web00001
 
15.03.13
04:15
я правильно понял, что документ формирует какую то печатную форму и ты хочешь точно такую же?
12 Web00001
 
15.03.13
04:16
конфигурация какая?
13 PiotrLoginov
 
15.03.13
04:17
УТ 11

В модуле обработки пишу экспортную процедуру Печать()
Обработчик нажатия успешно её запускает.

Пишу в модуле обработки СведенияОВнешнейОбработке() .  Пробую. Код выполняется без ошибок, но ничего не происходит.  Думаю, я что-то напутал с ЗадатьОбластьПечатиДокумента()  Обычно обращаются к типовой УправлениеПечатью.ЗадатьОбластьПечатиДокумента() , но эта процедура требует указать ссылку на печатаемый объект ИБ, а у меня нету ссылки ((
14 PiotrLoginov
 
15.03.13
04:19
(11) Не совсем.  Мне надо без обращения к какому-либо документу, без записи в ИБ каких-либо данных запросить нужную информацию из регистров и распечатать ее.
15 PiotrLoginov
 
15.03.13
04:29
Как-нибудь можно посмотреть в отладчике, какой табличный документ сформировываетя к концу выполнения процедуры Печать ? Очень досадно - код последовательно выполняется без проблем, но результата нет, ну вот хоть тресни...
16 Web00001
 
15.03.13
04:32
ты же заметил, что в приведенном тобой коде, нет ни слова про то какие данные и откуда берутся? информация как печатать объект, находится как правило в модуле объекта. Которого у тебя как я понимаю нет. Хотя могу и ошибаться. Надо ставить УТ11, смотреть отладчиком, разбираться. Я за это беру деньги, небольшие, но беру. Может кто еще подтянется кто делал недавно  и скажет навскидку
17 Web00001
 
15.03.13
04:34
хотя... кинь в меня своей обработкой
18 PiotrLoginov
 
15.03.13
04:35
19 PiotrLoginov
 
15.03.13
04:39
Готов дать данные от тимвьювера.. хотя инет у меня паршивый.  Готов перекинуть символическое количество вебманей... на хорошую шоколадку (емкости с пивом не предлагаю принципиально)
20 PiotrLoginov
 
15.03.13
04:44
я вижу в отладчике, что табличный документ сформирован.  я вижу количество строк в нем и его параметры. Но вот ведь ведь незадача, он не выводится на экран - и всё тут.
21 Web00001
 
15.03.13
05:01
пиши на почту данные тимвивера, хорошо бы аську, агент, джабер, вконтакт, хоть что то для связи, что оперативнее почты
22 PiotrLoginov
 
15.03.13
05:07
отправил
23 Web00001
 
15.03.13
05:17
Собственно вроде и так в коде разобрался, да там механизм отрабатывает, если ты все правильно заполнил, то нужно дополнить код

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


Попробуй проверить не на чем.
24 PiotrLoginov
 
15.03.13
05:27
(23) {ВнешняяОбработка.Сверка.МодульОбъекта(168)}: Метод объекта не обнаружен (Показать)
       ПечатнаяФорма.Показать();
25 PiotrLoginov
 
15.03.13
06:42
Порядок. Благодаря Web00001 вопрос решен использованием УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода() в модуле формы и может быть закрыт.