Имя: Пароль:
1C
1С v8
Печать из внешней обработки
0 Tornadius
 
01.11.13
11:54
1. В чем проблема? 80% (4)
2. Нужная вещь 20% (1)
3. Неплохо 0% (0)
4. Так себе 0% (0)
5. Отстой 0% (0)
Всего мнений: 5

Уважаемые форумчане. Прошу помощи в организации печати из внешней обработки, не путать с внешней печатной формой.  Клиент-серверная платформа, конфа КОРП. Задача. есть внешняя обработка которая собирает проводки в документ "Операция БУиНУ" и при этом необходимо отбракованные проводки собирать в табличный документ и его потом вывести на печать (типа протокол ошибок). собрать и отбраковать получается. не получается создать список ошибочных и его вывод на печать. особенно организация самого вывода. Конфу менять нельзя. Думаю многих заинтересует организация печати из внешних форм на клиент-серверной платформе.
1 Maxus43
 
01.11.13
11:56
Ничо не понял, у меня целый батальён в конфе внешних обработок-печ форм-отчетов, делай чего хочешь с ними

В чем проблема?
2 Azverin
 
01.11.13
11:59
(1) присоединяюсь.
3 Maxus43
 
01.11.13
12:01
(0) печатать можно не только из внешних печ форм, это можно делать откудо угодно, внешние обработки-отчеты в т.ч.
4 Любопытная
 
01.11.13
12:01
(0)В чем проблема? Не знаешь как макет создать и заполнить?

В чем проблема?
5 Галахад
 
гуру
01.11.13
12:01
(1), (2) Эх вы. Вот так надо: "ТС у тебя сложная и важная проблема. Ее срочно надо обсудить на высочайшем уровне!"
6 Maxus43
 
01.11.13
12:03
(5) Уважаемый Б. Нуралиев вылетел к вам на вертолёте чтобы как можно быстрее обсудить варианты решения проблемы и выпустить специальный внеочередной релиз платформы
7 Tornadius
 
01.11.13
12:05
проблема в том что отчет создается внутри внешней обработки. Постоянно вылазит сообщение {Форма.Форма.Форма(3,14)}: Процедура или функция с указанным именем не определена (Печать)
    ТабДок = <<?>>Печать(); (Проверка: Сервер)
мне не нужно печатать документы из конфы. мне нужно печатать свой макет который содержится во внешней обработке и заполняется там же. Может кто даст пример обработки?

Нужная вещь
8 Tornadius
 
01.11.13
12:07
В интернете везде примеры с реквизитом "Ссылка на объект" куда потом передается ссылка на документ. Но мне это не подходит. тем более формирование все идет на сервере а выводить надо на клиенте
9 Галахад
 
гуру
01.11.13
12:09
(6) Вот спасибо!

(7) Ну, так Б.Н. уже вылетел. Ты, главное не жалей, пропесочь его хорошенько!
10 User_Agronom
 
01.11.13
12:10
Ничего не понял.

В чем проблема?
11 Гефест
 
01.11.13
12:13
(7) А ты написал процедуру Печать()? Или 1с должна сама ее сочинить для тебя?
12 Tornadius
 
01.11.13
12:15
Бросте плиз код. в модуле объекта и модуле формы. с указанием где выполняться на сервере или на клиенте.
13 Tornadius
 
01.11.13
12:17
Мне же нужно чтобы после того как отстреляется процедура &НаСервере она же и запустила печать. или хотябы вывела на экран табличный документ откуда его потом можно напечатать
14 Tornadius
 
01.11.13
12:19
Это модуль объекта:

&НаСервере
// Это модуль объекта внешней формы
Функция Печать() Экспорт
    ПараметрыПечати = ПолучитьПараметрыПечатиОтчетаОшибок();
    ТабДокумент = СоздатьТабличныйДокументПечатиСчета( ПараметрыПечати );
    Возврат ТабДокумент;
КонецФункции // Печать

&НаСервере
Функция ПолучитьПараметрыПечатиОтчетаОшибок() Экспорт
    ПараметрыПечати = Новый Структура;
    // Внутри функции ПолучитьПараметрыПечати() формируем нужные запросы к БД,
    // заполняем структуру параметров печати
    ПараметрыПечати.Вставить("Организация",ЭтотОбъект.параметры.ОрганизацияОбр);
    Возврат ПараметрыПечати;
КонецФункции //ПолучитьПараметрыПечатиСчета()

&НаСервере
Функция СоздатьТабличныйДокументПечатиСчета(ПараметрыПечати)
    // Создаем новый табличный документ
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СомнительныеПроводки";
    // Получаем макет. Если не применять "ЭтотОбъект", а в конфигурации будет макет с таким же именем
    // описанный в "Общие" - "Общие макеты", то будет получен макет основной конфигурации
    Макет = ПолучитьМакет("СомнительныеПроводки");
    // Выводим шапку счета
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    // Выводим шапку операции документа
    ОбластьМакета = Макет.ПолучитьОбласть("ШапкаОпер");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    // Выводим ЗаголовокТаблицы документа
    ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    // Выводим СтрокаТаблицы документа
    ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы");
    ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
    ТабДокумент.Вывести(ОбластьМакета);
    
    // Добавляем нижний колонтитул
    ТабДокумент.НижнийКолонтитул.Выводить = Истина;
    ТабДокумент.НижнийКолонтитул.НачальнаяСтраница = 1;
    ТабДокумент.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
    ТабДокумент.НижнийКолонтитул.ТекстСправа = "[&НомерСтраницы] из [&СтраницВсего] стр.";
    Возврат ТабДокумент;
КонецФункции // СоздатьТабличныйДокументПечатиСчета()
15 mrDSide
 
01.11.13
12:23
&НаСервере + &ПриСозданииНаСервере

В чем проблема?
16 Tornadius
 
01.11.13
12:23
В модуле Формы есть процедура:

&НаСервере
Процедура ПроверкаПроводок(...)
Пока ЕстьПроводка Цикл
   Если Хорошая Тогда
       ... Дальнейшая обработка ...
   Иначе
      Вывести проводку в отчет
   КонецЕсли;
КонецЦикла;
Вывести Отчет с плохими проводками !!! Здесь проблема!!!
КонецПроцедуры
17 Tornadius
 
01.11.13
12:24
проблема в том как организовать вывод на печать???
процедуры не вызываются
18 Любопытная
 
01.11.13
12:24
Сегодня нашествие какое-то...
В строке ТабДок = <<?>>Печать(); тебе нужно вызвать экспортную процедуру из модуля объекта. Для этого нужно сначала сам объект получить, а потом уже обращаться к его методам. Кури РеквизитФормыВЗначение()
19 Лодырь
 
01.11.13
12:26
(16) Верни отчет с сервера на клиент. Там и распечатай. А на сервере куда ты что выводить собрался?
20 Tornadius
 
01.11.13
12:26
(18) Это уже проходили. Это работает когда надо делать внешнию печатную форму, а у меня создание отчета и его печать вызываются из внешней формы. Это разные задачи
21 Tornadius
 
01.11.13
12:27
(19) как это сделать?
22 Любопытная
 
01.11.13
12:27
(20) а в чем разница?
23 Tornadius
 
01.11.13
12:29
(22) в том что во внешней печатной форме есть документ  который через реквизит "СсылкаНаОбъект" используется.
а у меня нет внешнего документа. Просто есть данные. которы возникают в процессе работы процедур внешней обработки, и вот их надо все собрать в один отчет и вывести его на печать
24 Любопытная
 
01.11.13
12:30
(23) Ты в (14) привел модуль объекта, в котором описаны все процедуры печати. Или это не из модуля твоей обработки?
25 FIXXXL
 
01.11.13
12:31
(17) ведь сто пудов есть типовой механизм печати, посмотри в любом документе
типа

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_НовыеПароли";

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

    ОбластьМакета       = Макет.ПолучитьОбласть("Ответственный");
    ОбластьМакета.Параметры.Ответственный = ТекПользователь;
    ТабДокумент.Вывести(ОбластьМакета);
    
    УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 2, Ложь, "Измененные пароли пользователей");
26 Любопытная
 
01.11.13
12:31
(23) если тебе надо собрать все ошибки в один отчет, то собери их в одну ТЗ и выведи эту ТЗ в подготовленный тобой макет. Так же как выводится любая информация из любого объекта.
27 FIXXXL
 
01.11.13
12:32
(25) последня строка - это механизм печати типовой
28 Tornadius
 
01.11.13
12:32
(24) Из модуля обработки, но он не работает. Либо не получает макет. либо не вызывает функцию печати
29 Tornadius
 
01.11.13
12:34
(26) Собрать в ТЗ соберу (хотя логичнее было бы выводить сразу в отчет - чего собственно и добиваюсь) но как потом с сервера распечатать ТЗ. процедура "ПолучитьМакет" не работает на серверной стороне
30 Maxus43
 
01.11.13
12:34
(28) готовый таб документ, заполненый на сервере, надо вернуть на сторону клиента и там распечатать
31 Любопытная
 
01.11.13
12:34
(28) не вызывает функцию печати, о чем тебе платформа и сообщает.
32 Tornadius
 
01.11.13
12:35
(30), (31) Это понятно, как сделать передачу ТЗ на клиент или добится вызова функции печать либо получить макет?
33 Tornadius
 
01.11.13
12:36
Люди дайте код.
34 Maxus43
 
01.11.13
12:37
(32) ТЗ нельзя, потому сам табличный документ надо возвращать на клиент, а на клиенте его просто печатать, он заполненый должен быть на сервере
35 Любопытная
 
01.11.13
12:37
(32)ЭтотОбъект = РеквизитФормыВЗначение("Объект");
ТабДок = ЭтотОбъект.Печать();
36 Maxus43
 
01.11.13
12:37
(35) ему произвольную печать надо, не печать документа
37 Tornadius
 
01.11.13
12:37
(35) не работает
38 PLUT
 
01.11.13
12:38
39 Любопытная
 
01.11.13
12:38
(36) у него прописана печать чего-то модуле объекта в обработке. Можно в той же процедуре печати прописать печать того, что ему надо
40 Tornadius
 
01.11.13
12:46
Народ. Прежде чем выводить секции макета - т.е. заполнять отчет, нужно создать табличный документ.

ТД = Новый ТабличныйДокумент;

и получить макет
Макет = ПолучитьМакет("СомнительныеПроводки");

(здесь уже выскакивает ошибка)
после этого надо заполнить
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьШапка.Параметры.Организация = ОрганизацияОбр;
и вывести
   ТД.Вывести(ОбластьШапка);

и это все на &НаСервере

Как потом сделать ТД.ПОКАЗАТЬ и где?
41 PLUT
 
01.11.13
12:48
(40) на каком б.ять Сервере? на клиенте заполняй и выводи
42 Tornadius
 
01.11.13
12:51
(41) на таком. что значения возникают на сервере и ТД заполняется там же
43 Tornadius
 
01.11.13
13:00
Как из процедуры на сервере сделать вывод печати на клиенте? не прерывая процедуры на сервере?
44 Maxus43
 
01.11.13
13:11
на клиенте:

ТД = ЗаполнитьТдНаСервере();
ТД.Показать();
45 Tornadius
 
05.11.13
06:24
(44) Где писасать код
ТД  =  Новый ТабличныйДокумент;  на клиенте или на сервере?

и второе. если ТД создавать на клиенте, то как ему получить макет? ибо макет = ПолучитьМакет(...) на клиенте не работает.
46 Wobland
 
05.11.13
06:31
(45) уговори сервер вернуть клиенту ТабДок
47 Мимохожий Однако
 
05.11.13
06:53
&НаСервере
Функция ВернутьССервераТабДок()
ТД  =  Новый ТабличныйДокумент;
//....создаем табдок
Возврат ТД;
КонецФункции

&НаКлиенте
Процедура ПечатьНаКлиенте()
ТД = ВернутьССервераТабДок();
ТД.ПОказать();
КонецПроцедуры;
48 Tornadius
 
07.11.13
12:03
(47) Спасибо! У меня получилось.
Вот только расшифровка ячеек не срабатывает, хотя стоит:
ОбластьМакета.Параметры.РасшифровкаОС = ОС.Ссылка;
Что делать дальше не знаю. ТД открывается в отдельном окне, а не в форме отчета.
49 Лодырь
 
07.11.13
12:55
(48) Ну не делай ТД.Показать()
Выведи твой табличный документ в поле табличного документа на форме.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший