Имя: Пароль:
1C
1С v8
Внешняя обработка, кнопки печати... помогите обойти ошибку
0 shock3r
 
26.10.12
10:53
Взял код для установок кнопок печати макетов из документа командировочные удостоверения. Всё хорошо, но код написан для Документа, а у меня внешняя обработка, кнопки выводятся но при нажатии на Печать, вызывается след процедура:

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

в функции ПечатьПоДополнительнойКнопке получаю ошибку:

{ОбщийМодуль.РаботаСДиалогами.Модуль(3016)}: Поле объекта не обнаружено (Ссылка)
   ДеревоМакетовПечати = ПолучитьДеревоМакетовПечати(Объект.Ссылка, СтруктураВнутреннихПечатныхФорм);



// Процедура - обработчик нажатия любой из дополнительных кнопок печати
// Параметры:
//    ДеревоМакетов: ДеревоЗначений, макетов печатных форм
//    Объект       : ДокументОбъект, СправочникОбъект, из формы которого вызвана процедура
//    Форма        : Форма, вызвавшая процедуру
//    ТекстКнопки  : Строка, заголовок нажатой кнопки
Процедура ПечатьПоДополнительнойКнопке(УдалитьДеревоМакетов, Объект, Форма = Неопределено, ТекстКнопки) Экспорт
   
   Если НЕ Форма = Неопределено Тогда
       Если НЕ РаботаСДиалогами.ПроверитьМодифицированностьВФорме(Объект,Форма) Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;
   
   Попытка
       СтруктураВнутреннихПечатныхФорм = Объект.ПолучитьСтруктуруПечатныхФорм()
   Исключение
       СтруктураВнутреннихПечатныхФорм = Новый Структура;
   КонецПопытки;
   
   ДеревоМакетовПечати = ПолучитьДеревоМакетовПечати(Объект.Ссылка, СтруктураВнутреннихПечатныхФорм);
   
   СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти(ТекстКнопки,"Текст");
   
   Если СтрокаКнопки = Неопределено Тогда
       
       Предупреждение("Печать не доступна. Изменился набор реквизитов!");
       Возврат;
       
   КонецЕсли;
   
   НаПринтер = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ПечатьДокументовБезПредварительногоПросмотра") = Истина;
   
   Расшифровка = СтрокаКнопки.Расшифровка;
   Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
       ТабДокумент = НапечататьВнешнююФорму(Объект.Ссылка, Расшифровка);
       УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 0, НаПринтер, СформироватьЗаголовокДокумента(Объект), Объект.Ссылка);
   Иначе
       Объект.Печать(СтрокаКнопки.Имя, 0, НаПринтер);
   КонецЕсли;
   
КонецПроцедуры // ПечатьПоДополнительнойКнопке()
1 hunter76
 
26.10.12
10:56
РаботаСДиалогами.ПечатьПоДополнительнойКнопке(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка.Текст);

вместо "ЭтотОбъект" надо документ передавать
2 Cube
 
26.10.12
10:56
(0) "ДеревоМакетовПечати = ПолучитьДеревоМакетовПечати(Объект.Ссылка, СтруктураВнутреннихПечатныхФорм);"
У обработки есть ссылка?
3 Ayvengo
 
26.10.12
10:59
(0) в отладчике глянь, от куда он хочет брать ссылку и правильно передавай. Если тонкий клиент, тогда ЭтотОбъект - такого нет в модулях форм.
4 shock3r
 
26.10.12
11:00
(1) т.е. для внешней обработки этот код никак не подойдет?
(2) я не знаю есть ли у внешней обработки ссылка, поэтому и спрашиваю у более опытных программистов на форуме
5 Ayvengo
 
26.10.12
11:00
(4) внешняя обработка печати ... должен быть реквизит СсылкаНаОбъект, попробуй ее и передавать.
6 hunter76
 
26.10.12
11:01
(4) если у тебя на форме выбирается документ, то можно передать ЭтотОбъект.МойВыбранныйДокумент
7 Cube
 
26.10.12
11:03
(4) "я не знаю есть ли у внешней обработки ссылка" - НЕТУ. Рисуй кнопки вручную, не мудри.
8 Ayvengo
 
26.10.12
11:04
(7) совет китайского кода? :) Зачем рисовать кнопки, если есть внешние печатные формы?
9 shock3r
 
26.10.12
11:04
(5) можно немного подробнее, если вас не затруднит, использовать другую функцию? Для внешних обработок своя функция печати?
10 shock3r
 
26.10.12
11:04
(7) макетов может быть от 4 до overмного... так что вручную не вариант
11 Ayvengo
 
26.10.12
11:05
Если я правильно понял, тебе нужно подключить внешнюю печатную форму? Если так, тогда читай:

Внешняя печатная форма.

Внешняя обработка, содержащая:

Необязательный реквизит «ДополнительныеПараметры» произвольного типа, которому будут передаваться дополнительные параметры примитивного типа в виде структуры.
Реквизит «СсылкаНаОбъект», в который при вызове будет передана ссылка на объект, для которого необходимо выполнить печать.
Функция «Печать()» - без параметров,  возвращающая табличный документ.

Также обработка может иметь в своем составе макет «Параметры_Авторегистрации», используемый для автоматического заполнения принадлежности печатной формы в справочнике «Внешние обработки» и состоящий из 2-х колонок («полное имя метаданного» и «имя табличной части»).
12 shock3r
 
26.10.12
11:05
(6) да у меня есть поле ввода, в котором выбирается документ..
Поле называется Документ, в нем стоит ссылка на Документы.ОтчетПроизводстваЗаСмену
13 Cube
 
26.10.12
11:06
(8) и (10) Вы, видимо не догоняете: ему надо прикрутить печатную форму к обработке. Что там в обработке происходит - никто не знает, но стандартный код в чистом виде не отработает. Это факт.
14 Ayvengo
 
26.10.12
11:07
(9) а вообще, хорошо бы знать что за конфигурация у тебя и платформа :)
15 Ayvengo
 
26.10.12
11:08
(13) т.е. это что-то вроде печати пакет документов?
16 Cube
 
26.10.12
11:09
(15) Хз что там у него, он же не говорит :)
17 shock3r
 
26.10.12
11:09
(6) не прокатило. Выдает сообщение: "Печать недоступна. Изменился набор реквизитов"
18 Ayvengo
 
26.10.12
11:10
(17) что у тебя за платформа, конфигурация, под какой клиент делаешь обработку? :)
19 Ayvengo
 
26.10.12
11:11
(17) ты хочешь сделать что-то вроде печати пакета документов или как?
20 hunter76
 
26.10.12
11:11
(17) надо сделать по образу и подобию внеш.печатной формы
21 shock3r
 
26.10.12
11:12
(13) Мне нужно на внешнюю обработку, повесить кнопки печати, которые будут печатать макеты этой обработки... Сейчас при нажатии на кнопку печать по умолчанию, должен вызываться макет1, в котором написано hello word, но пока этого не происходит из-за косяка со "Ссылкой"
22 shock3r
 
26.10.12
11:13
(14) платформа 8.2, конфигурация: бухгалтерия для беларуси 1.6
23 shock3r
 
26.10.12
11:13
(18) Толстый клиент
24 shock3r
 
26.10.12
11:15
(19) нет, я хочу сделать печать этикеток, данные берутся из документа ОтчетПроизводстваЗаСмену. У меня уже обработка забивает табличную часть нужными данными осталось только реализовать вывод макета
25 Ayvengo
 
26.10.12
11:17
(24) а от куда хочешь печатать? Из самого документа или открывать обработку?
26 Ayvengo
 
26.10.12
11:19
(24) на сколько я вижу, тебе нужно сделать 2 обработку. Одна заполнения, далее запись документа. После записи печать внешней формы. Используй внешние обработки. Нажми на кнопку справка в окне, где добавляются внешние обработки и почитай что необходимо сделать.
27 Cube
 
26.10.12
11:33
shock3r И зачем ты всю эту фигню мутишь тогда? Делаешь на форме обработки кнопку, а процедура этой кнопки выглядеть должна, примерно, так:

Макет = ПолучитьМакет("МойМакет");
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Вывести(Макет);
ТабДокумент.Показать();
28 shock3r
 
26.10.12
11:39
(27) а если макетов будет 10 штук? 10 кнопок делать?
29 shock3r
 
26.10.12
11:40
(27) в той реализации которую я видел - вылазит менюшка, которая легко программируется при добавлении макетов
30 Cube
 
26.10.12
11:40
(28) Подменю печати и вперде...
31 Ayvengo
 
26.10.12
11:40
(28) а визуально это будет 10 кнопок или 1 кнопка, которая фиг знает по каким параметрам выбирать макет? :)
32 shock3r
 
26.10.12
11:42
(25) печатать из самой обработки. Т.е. в обработке открывается документ: отчет производства за смену, в него копируются данные, и по его макетам печатаются этикетки
33 Ayvengo
 
26.10.12
11:42
(29) проще сделать свою реализацию построения менюшки, чем использовать этот перегруженный механизм.
34 Cube
 
26.10.12
11:42
(29) Тот типовой механизм не трогай. С твоими знаниями - не взлетит. Сделай просто, для начала. А потом будешь думать, надо сделать по-другому или нет.
35 shock3r
 
26.10.12
11:47
(33)
(34)

Понял, вообщем не буду лезть в этот механизм, буду делать через кнопки, как вы и советуете
36 shock3r
 
26.10.12
11:48
(33) а сделать свою реализацию очень сложно? В какую сторону копать? разбирать тот код, который для документов реализован?
37 Cube
 
26.10.12
11:50
(36) "а сделать свою реализацию очень сложно?"
См. (27). Всё просто.
38 Ayvengo
 
26.10.12
11:53
(35) так а этот механизм и делает кнопки :) Просто ты сам можешь написать легкий код на те макеты, которые тебе нужны. Зачем обращаться в эту жуткую среду стандартных подсистем :D
(36) берешь массив или список значений или тз своих печатных форм и добавляешь кнопки перед открытием формы :)
На кнопку назначаешь процедуру, которая будет вызывать функцию печать из модуля объекта и передавать туда имя макета, а в процедуре печати будешь проверять если имя макета, то возвращать табдок такой-то и т.д.
А далее можешь воспользоваться стандартной формой вывода печатных форм, что бы не настраивать все самому :)
39 shock3r
 
26.10.12
12:07
(38) спасибо, не буду тогда время тратить на реализованный в 1С механизм подменю
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан