Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 20:39

Внешная печатная форма в 8.2 - нужна помощь

Автор Pett, 24 мар 2011, 14:19

0 Пользователей и 1 гость просматривают эту тему.

Pett

В БП (2.0.19.9) на платформе 8.2.13.202  написала ВПФ для док-та "Реализация товаров  услуг". Реквизит "СсылкаНаОбъект" - есть, тип - правильный. В модуле написала следующий код:
++++++++
Перем мВалютаРегламентированногоУчета Экспорт;
Функция Печать()Экспорт
    Перем ЗапросШапка, Шапка, ЗапросУслуги, ТаблицаУслуги;
   Перем ТабДокумент, Курс, Кратность,Макет, ОбластьМакета;
   мВалютаРегламентированногоУчета   = Константы.ВалютаРегламентированногоУчета.Получить();
   ЭтотОбъект = СсылкаНаОбъект;
   ЗапросШапка = Новый Запрос;
   ЗапросШапка.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
   ЗапросШапка.Текст =
   "ВЫБРАТЬ
   |   Номер,
   |   Дата,
   |   ДоговорКонтрагента,
   |   ДоговорКонтрагента.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
   |   Контрагент КАК Получатель,
   |   Организация КАК Поставщик,
   |   Организация,
   |   СуммаДокумента,
   |   ВалютаДокумента,
   |   УчитыватьНДС,
   |   СуммаВключаетНДС
   |ИЗ
   |   Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
   |
   |ГДЕ
   |   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
   Шапка = ЗапросШапка.Выполнить().Выбрать();
   Шапка.Следующий();

   ЗапросУслуги = Новый Запрос;
   ЗапросУслуги.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
   ЗапросУслуги.УстановитьПараметр("Курс",            ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект,      мВалютаРегламентированногоУчета));
   ЗапросУслуги.УстановитьПараметр("Кратность",       ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета));
   
   ЧастьЗапросаДляВыбораСодержанияУслуг = ФормированиеПечатныхФорм.ПолучитьЧастьЗапросаДляВыбораСодержанияУслуг("РеализацияТоваровУслуг");
   
   ЗапросУслуги.Текст =
   "ВЫБРАТЬ
   |   Номенклатура КАК Номенклатура,
   |   ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК Товар,
   |   Количество,
   |   ЕдиницаИзмерения  КАК ЕдиницаИзмерения,
   |   Цена * &Курс / &Кратность КАК Цена,
   |   Сумма * &Курс / &Кратность КАК Сумма,
   |   СтавкаНДС,
   |   СуммаНДС * &Курс / &Кратность КАК СуммаНДС
   |ИЗ
   |   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслуг
   |
   |ГДЕ
   |   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
   |   И
   |   РеализацияТоваровУслуг.Номенклатура.Услуга = Истина
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   |   " + ЧастьЗапросаДляВыбораСодержанияУслуг + ",
   |   " + ЧастьЗапросаДляВыбораСодержанияУслуг + ",
   |   Количество,
   |   Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения,
   |   Цена * &Курс / &Кратность КАК Цена,
   |   Сумма * &Курс / &Кратность КАК Сумма,
   |   СтавкаНДС,
   |   СуммаНДС * &Курс / &Кратность КАК СуммаНДС
   |ИЗ
   |   Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслуг
   |
   |ГДЕ
   |   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   |   " + ЧастьЗапросаДляВыбораСодержанияУслуг + ",
   |   " + ЧастьЗапросаДляВыбораСодержанияУслуг + ",
   |   Количество,
   |   Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения,
   |   Цена * &Курс / &Кратность КАК Цена,
   |   Сумма * &Курс / &Кратность КАК Сумма,
   |   СтавкаНДС,
   |   СуммаНДС * &Курс / &Кратность КАК СуммаНДС
   |ИЗ
   |   Документ.РеализацияТоваровУслуг.АгентскиеУслуги КАК РеализацияТоваровУслуг
   |
   |ГДЕ
   |   РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент";
   ТаблицаУслуги = ЗапросУслуги.Выполнить().Выгрузить();
   
   
   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_АктУслугТАМП";
   Макет       = ПолучитьМакет("АктУслугТАМП");

   ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
   ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Акт");
   ТабДокумент.Вывести(ОбластьМакета);

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

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

   ЕстьСкидки = Ложь;

   // Вывести табличную часть
   ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьСтроки = Макет.ПолучитьОбласть("Строка");

   ТабДокумент.Вывести(ОбластьМакета);
   НомерСтроки = 0;

   Для Каждого СтрокаТабличнойЧасти Из ТаблицаУслуги Цикл

      НомерСтроки = НомерСтроки + 1;
      
      ОбластьСтроки.Параметры.Заполнить(СтрокаТабличнойЧасти);
      ОбластьСтроки.Параметры.НомерСтроки = НомерСтроки;
        ОбластьСтроки.Параметры.Товар = СокрЛП(СтрокаТабличнойЧасти.Товар);
      
      Если Шапка.ВалютаДокумента <> мВалютаРегламентированногоУчета Тогда
         ОбластьСтроки.Параметры.Цена  = СтрокаТабличнойЧасти.Сумма / ?(СтрокаТабличнойЧасти.Количество = 0, 1, СтрокаТабличнойЧасти.Количество);
      КонецЕсли;
      
      ТабДокумент.Вывести(ОбластьСтроки);

   КонецЦикла;

   Если ТаблицаУслуги <> Неопределено Тогда

      Сумма    = ТаблицаУслуги.Итог("Сумма");
      СуммаНДС = ТаблицаУслуги.Итог("СуммаНДС");

   Иначе

      Сумма    = 0;
      СуммаНДС = 0;

   КонецЕсли;

   ОбластьМакета = Макет.ПолучитьОбласть("Итого");
   ОбластьМакета.Параметры.Всего = ОбщегоНазначения.ФорматСумм(Сумма);
   ТабДокумент.Вывести(ОбластьМакета);

   Если Шапка.УчитыватьНДС Тогда

      ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
      
      Если СуммаНДС <> 0 Тогда
         ОбластьМакета.Параметры.ВсегоНДС = ОбщегоНазначения.ФорматСумм(СуммаНДС);
         ОбластьМакета.Параметры.НДС      = ?(Шапка.СуммаВключаетНДС, "В том числе НДС", " Сумма НДС");
      Иначе
         ОбластьМакета.Параметры.ВсегоНДС = "-";
         ОбластьМакета.Параметры.НДС      = "Без налога (НДС)";
      КонецЕсли;
      
      ТабДокумент.Вывести(ОбластьМакета);

   КонецЕсли;

   СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
   ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
   ОбластьМакета.Параметры.ИтоговаяСтрока ="Всего оказано услуг " + НомерСтроки
                                          + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, мВалютаРегламентированногоУчета);
   ОбластьМакета.Параметры.СуммаПрописью  = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, мВалютаРегламентированногоУчета);
   ТабДокумент.Вывести(ОбластьМакета);

   ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
   ТабДокумент.Вывести(ОбластьМакета);

   Возврат ТабДокумент;

КонецФункции // Печать()
++++++++
Не работает, пишет "Метод объекта не обнаружен (Печать)"


Makifka

а саму внешнюю форму можно приложить файлом? то есть вы считаете, что запросы у вас написаны правильно? или мы до них пока не дошли? вы за основу брали функцию Печать() с какого модуля типовой конфигурации ?

Makifka

вы её подключили и не не работает, или через файл->открыть... не работает?

Pett

ВПФ создала в конфигураторе, в модуль этого объекта скопировала функцию "ПечатьАктаОбОказанииУслуг()" из модуля документа "РеализацияТоваровУслуг", исправила ЭтотОбъект на СсылкаНаОбъект, объявила необходимые переменные, макет пока не исправляла. Сохранила, подключила в "Предприятии". При открытии док-та Реализация товаров и услуг, в списке печатных форм (принажатие на кнопку Печать) - моя форма есть, но при её выборе из списка программа выдает сообщение "Метод объекта не обнаружен (Печать)". А через файл->открыть... по-моему работать не должно, ведь не определена СсылкаНаОбъект

has

А в каком месте ошибка вылазит? Модуль, строка?

Pett

Цитата: has от 25 мар 2011, 09:46
А в каком месте ошибка вылазит? Модуль, строка?
Сообщение об ошибке  появляется, когда в "Предприятии" из док-та "Реализация товаров и услуг" пользователь выбирает подключенную мною печатную форму

has

Цитата: Pett от 25 мар 2011, 09:53
Сообщение об ошибке  появляется, когда в "Предприятии" из док-та "Реализация товаров и услуг" пользователь выбирает подключенную мною печатную форму
Это я понял, строку не указывает чтоли в какой ошибка? Вобще отладчик в руки и вперед

Pett

Номер строки не указывает,пишет только "Не удалось сформировать внешнюю печатную форму! Метод объекта не обнаружен (Печать)", а внешнюю печ.форму под отладчиком не пройдёшь. Если бы можно было это сделать, то ошибку бы давно нашла

has

Цитата: Pett от 25 мар 2011, 10:37
а внешнюю печ.форму под отладчиком не пройдёшь.
да ну?)))
Общий модуль - Универсальные механизмы. Процедура "Напечатать внешнюю форму". Ставим точку останова на ТабДокумент = Обработка.Печать();
И тут попадаем в процедуру Печать() внешней печатной формы

Pett


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск