Имя: Пароль:
1C
1С v8
Внешняя печатная форма с нуля!!!
0 Kucha88
 
14.12.12
09:45
Добрый день, делаю внешнюю печатную форму Инвентаризационная опись к документу Инвентаризация НЗП, но вывод ошибку при формировании печати "Недостаточно фактических параметров" Код ниже:
Функция Печать(МассивОбъектов, ОбъектыПечати) экспорт
   
   ТекстЗапроса = "
   |ВЫБРАТЬ
   |    ИнвентаризацияНЗП.Организация,
   |    ИнвентаризацияНЗП.Подразделение,
   |    ИнвентаризацияНЗП.Ссылка,
   |    ИнвентаризацияНЗП.Номер,
   |    ИнвентаризацияНЗП.Дата,
   |    ИнвентаризацияНЗП.Заказ,
   |    ИнвентаризацияНЗП.Материалы.(
   |        Ссылка,
   |        НомерСтроки КАК НомерСтроки,
   |        ЕдиницаИзмеренияМест,
   |        Заказ,
   |        КоличествоМест,
   |        Коэффициент,
   |        Номенклатура,
   |        НоменклатурнаяГруппа,
   |        СерияНоменклатуры,
   |        Количество,
   |        ХарактеристикаНоменклатуры,
   |        СчетЗатрат,
   |        СчетЗатратНУ,
   |        ЕдиницаИзмерения,
   |        Номенклатура.Представление КАК НоменклатураПредставление,
   |        Номенклатура.БазоваяЕдиницаИзмерения.Код КАК ЕдиницаИзмеренияКод
   |    ),
   |    ИнвентаризацияНЗП.ВводитьЗаказыПоСтрокам,
   |    ИнвентаризацияНЗП.Заказ.Представление КАК ЗаказПредставление,
   |    ИнвентаризацияНЗП.Организация.Представление КАК ОрганизацияПредставление,
   |    ИнвентаризацияНЗП.Подразделение.Представление КАК ПодразделениеПредставление
   |ИЗ
   |    Документ.ИнвентаризацияНЗП КАК ИнвентаризацияНЗП
   |ГДЕ
   |    ИнвентаризацияНЗП.Ссылка = &ТекДок
   |
   |УПОРЯДОЧИТЬ ПО
   |    НомерСтроки";
   
   ТабДокумент  = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ИнвентаризацияНЗП_ИнвентаризационнаяОпись";
   ТабДокумент.ОриентацияСтраницы  = ОриентацияСтраницы.Ландшафт;
   Макет   = ПолучитьМакет("ИнвентаризационнаяОпись");
   
   ПервыйДокумент = Истина;
   
   Для Каждого Ссылка Из МассивОбъектов Цикл
       
       Если Не ПервыйДокумент Тогда
           ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
       КонецЕсли;
       
       ПервыйДокумент = Ложь;
       
       НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

       Запрос = Новый Запрос;
       Запрос.Текст = ТекстЗапроса;
       
       Запрос.УстановитьПараметр( "ТекДок", СсылкаНаОбъект);
       
       РезультатЗапроса = Запрос.Выполнить();
       Шапка = РезультатЗапроса.Выбрать();
       Шапка.Следующий();
   
       ИнфоОрг = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице( Шапка.Организация, Ссылка.Дата);
       
       Область = Макет.ПолучитьОбласть( "Шапка");
       Область.Параметры.ПечНомерДок      = Шапка.Номер;
       Область.Параметры.ПечДатаДок       = Шапка.Дата;
       Область.Параметры.ПечОрганизация   = ИнфоОрг.ПолноеНаименование;
       Область.Параметры.ПечПодразделение = Шапка.ПодразделениеПредставление;
       Если НЕ Шапка.ВводитьЗаказыПоСтрокам И ЗначениеЗаполнено(Ссылка.Заказ)Тогда
           Область.Параметры.ПечЗаказ     = Шапка.ЗаказПредставление;
           Область.Параметры.Заказ        = Шапка.ЗаказПредставление;
       КонецЕсли;
       Область.Параметры.КодОКПО          = ИнфоОрг.КодПоОКПО;
       Область.Параметры.Организация      = Шапка.Организация;
       Область.Параметры.Подразделение    = Шапка.Подразделение;
       
       ТабДокумент.Вывести(Область);
       ОбластьТабШапка = Макет.ПолучитьОбласть("ТабШапка");
       ТабДокумент.Вывести(ОбластьТабШапка);
       
       Индекс       = 0;
       ВсегоТМЦ     = 0;
       ВсегоКолФакт = 0;
       КолФактСтр   = 0;
       СтрокНаЛисте = 10;
       Обход        = Шапка.Материалы.Выбрать();
       Пока Обход.Следующий() Цикл
           
           Если Индекс >= СтрокНаЛисте Тогда
               ОбластьПодвал = Макет.ПолучитьОбласть("ПодвалСтраницы");
               ОбластьПодвал.Параметры.КолНомСтр  = Индекс;
               ОбластьПодвал.Параметры.ИтогКолСтр = КолФактСтр;
               ТабДокумент.Вывести( ОбластьПодвал);
               Индекс     = 0;
               КолФактСтр = 0;
               ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
               ТабДокумент.Вывести(ОбластьТабШапка);
               СтрокНаЛисте = 31; // На первом листе 9 строк, на остальных 30
           КонецЕсли;
           
           Индекс   = Индекс + 1;
           ВсегоТМЦ = ВсегоТМЦ + 1;
           Область  = Макет.ПолучитьОбласть("Строка");
           Область.Параметры.ПечНомер        = Формат( Индекс, "ЧЦ=6; ЧН=");
           Область.Параметры.ПечНоменклатура = Обход.НоменклатураПредставление;
           Область.Параметры.Номенклатура    = Обход.Номенклатура;
           Область.Параметры.ПечКодТМЦ       = Обход.Номенклатура.Код;
           Область.Параметры.ПечКодЕИ        = Обход.ЕдиницаИзмеренияКод;
           Область.Параметры.ПечЕИ           = Обход.ЕдиницаИзмерения.Наименование;
           Область.Параметры.ПечКолФакт      = Формат( Обход.Количество, "ЧЦ=15; ЧДЦ=3");
           ТабДокумент.Вывести(Область);
           
           КолФактСтр   = КолФактСтр   + Обход.Количество;
           ВсегоКолФакт = ВсегоКолФакт + Обход.Количество;
           
       КонецЦикла;
       
       Область = Макет.ПолучитьОбласть("Итого");
       Область.Параметры.ПечКолФактИтого = Формат( ВсегоКолФакт, "ЧЦ=15; ЧДЦ=3");
       ТабДокумент.Вывести( Область);
       Если Индекс > 0 Тогда
           ОбластьПодвал = Макет.ПолучитьОбласть("ПодвалСтраницы");
           ОбластьПодвал.Параметры.КолНомСтр  = Индекс;
           ОбластьПодвал.Параметры.ИтогКолСтр = КолФактСтр;
           ТабДокумент.Вывести( ОбластьПодвал);
       КонецЕсли;
       
       Область = Макет.ПолучитьОбласть("Подвал");
       Область.Параметры.ВсегоТМЦ      = ВсегоТМЦ;
       Область.Параметры.ИтогоКолОпись = ВсегоКолФакт;
       ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
       ТабДокумент.Вывести( Область);
       //УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент, НомерСтрокиНачало, ОбъектыПечати, Ссылканаобъект.Ссылка);

   КонецЦикла;

   Возврат ТабДокумент;
   
КонецФункции // ПечатьИнвентаризационнаяОпись()

Помогите решить проблему пожалуйста!!!
1 Stim
 
14.12.12
09:46
на каку строчку ругается?
2 Kucha88
 
14.12.12
09:55
не пишет какая строка
3 YF
 
14.12.12
09:57
(2) Отладчик в руки и вперед
4 Wassily
 
14.12.12
09:58
Конфигуратор - Отладка - Остановка по ошибке
5 Шапокляк
 
14.12.12
09:59
(0) Вроде как в штатном механизме использования внещних печатных форм предполагается вызов процедуры Печать без параметров.
6 Kucha88
 
14.12.12
10:01
(4) Сейчас попробую
7 Kucha88
 
14.12.12
10:02
Ругается на общий модуль документа код: ТабДокумент = Обработка.Печать();
8 YF
 
14.12.12
10:03
(7) Клиент-серверный вариант?
9 sidalexsandr
 
14.12.12
10:03
Нажми F12
10 Wobland
 
14.12.12
10:03
(7) кто из них общий модуль? что такое общий модуль документа?
11 Maxus43
 
14.12.12
10:03
в типовом механизме внешних печатных так:
Функция Печать() Экспорт

+ реквизит(переменная) ссылканаобъект
12 Maxus43
 
14.12.12
10:03
без параметров
13 Maxus43
 
14.12.12
10:04
нажми f1 на справочнике внешних печ форм!
14 Светлый Гений
 
14.12.12
10:04
(7)у тебя в обработке функция Печать с 2-мя параметрами, а вызываешь без параметров
15 Kucha88
 
14.12.12
10:42
(14) а как нужно? (11) ну если убрать параметры то опять начинаются ошибки на эти параметры
16 Wobland
 
14.12.12
10:44
(15) Максус тебе сказал, как нужно, как должно быть. делай.
17 Kucha88
 
14.12.12
10:44
вот код на который ругается
Функция НапечататьВнешнююФорму(Ссылка, ИсточникМакета) Экспорт
   
   Перем ДополнительныеПараметры;
   
   ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.Принадлежность[ИсточникМакета.НомерСтроки - 1].ХранилищеВнешнейОбработки.Получить();
   
   // Получить дополнительные параметры внешней обработки
   ИсточникМакета.Свойство("ДополнительныеПараметрыОбработки", ДополнительныеПараметры);
   
   Если ДвоичныеДанные = Неопределено Тогда
       ДвоичныеДанные = ИсточникМакета.СсылкаНаВнешнююОбработку.ХранилищеВнешнейОбработки.Получить();
   КонецЕсли;
   
   Если ДвоичныеДанные = Неопределено Тогда
       Возврат Неопределено;
   КонецЕсли;
   
   ТабДокумент = Неопределено;
   
   ИмяФайла = ПолучитьИмяВременногоФайла("epf");
   Попытка
       ДвоичныеДанные.Записать(ИмяФайла);
       Обработка = ВнешниеОбработки.Создать(ИмяФайла);
       Обработка.СсылкаНаОбъект = Ссылка;
       
       // Передать внешней обработке дополнительные параметры
       Если ДополнительныеПараметры <> Неопределено Тогда
           
           // Если у внешней обработки есть реквизит для дополнительных параметров, присвоить ему значение
           Если НЕ Обработка.Метаданные().Реквизиты.Найти("ДополнительныеПараметры") = Неопределено Тогда
               Обработка.ДополнительныеПараметры = ДополнительныеПараметры;
           КонецЕсли;
           
       КонецЕсли;
       
       ТабДокумент = Обработка.Печать(); вот эта строка на которую ругается
       УдалитьФайлы(ИмяФайла);
   Исключение
       ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось сформировать внешнюю печатную форму!");
   КонецПопытки;
   
   Возврат ТабДокумент;

КонецФункции
18 Kucha88
 
14.12.12
10:45
(16)  ну хорошо щас попробую переделать
19 Wobland
 
14.12.12
10:45
(17) в общем случае внимательное чтение сообщения об ошибке сокращает количество тем на форумах и не уменьшает длину нервов
20 Kucha88
 
14.12.12
10:50
если убрать параметры печати то как тогда избежать
Для Каждого Ссылка Из МассивОбъектов Цикл//потому что ругается на МассивОбъектов
21 Wobland
 
14.12.12
10:56
(20) лучше задайся вопросом "как начать жить с правильной функцией Печать()?"
я не знаю, мне лениво колупать то, что будет переписано
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой