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

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
Внешняя печатная форма, Внешняя печатная форма для Счет на оплату покупателю
 
Добрый день, уже который день пытаюсь создать внешнюю печатную форму для документа Счет на оплату покупателю. Версия конфигурации 2.0.7.2
Столкнулся с тем что выскакивает ошибка:
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(145)}: В обработчике печати не был сформирован табличный документ для: CRM_СчетНаОплатуПокупателю (в виде счета)
ВызватьИсключение(ТекстСообщенияОбОшибке);

Вот примерная схема моей обработки.

Функция СведенияОВнешнейОбработке() Экспорт

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

Функция ПолучитьТаблицуКоманд()

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование,

КонецПроцедуры

//Сделать процедуру Печать в модуле объетка и сформировать ТабличныйДокумент:

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


// Функция формирует печатную форму документа.
//
// Параметры:
// Тип - Строка - тип печатной формы: Заказ или Счет
// МассивОбъектов - Массив - массив документов для печати
// ОбъектыПечати - СписокЗначений
//
// Возвращаемое значение:
// ТабличныйДокумент
//
Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)
//Код формирования ТабДокумента
Возврат ТабДокумент;
КонецФункции // СформироватьПечатнуюФорму()





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

// Объявим еще одну переменную, которая нам потребуется ниже
МассивНазначений = Новый Массив;

// Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
// Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");

// Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
// Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
// которые поддерживают механизм ВПФ
МассивНазначений.Добавить("Документ.CRM_СчетНаОплатуПокупателю");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);

// Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("Наименование", "CRM_СчетНаОплатуПокупателю");

// Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("CRM_Печать", Истина);
// Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма 'Счет' к документу CRM_СчетНаОплатуПокупателю");

// Создадим таблицу команд (подробнее смотрим ниже)
ТаблицаКоманд = ПолучитьТаблицуКоманд();

// Добавим команду в таблицу
ДобавитьКоманду(ТаблицаКоманд, "Счет покупателю", "CRM_СчетНаОплатуПокупателю (в виде счета)", "ВызовСерверногоМетода", Истина, "ПечатьMXL",Истина);

// Сохраним таблицу команд в параметры регистрации обработки
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

// Теперь вернем системе наши параметры
Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()

// Создадим пустую таблицу команд и колонки в ней
Команды = Новый ТаблицаЗначений;

// Как будет выглядеть описание печатной формы для пользователя
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

// Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

// Тут задается, как должна вызваться команда обработки
// Возможные варианты:
// - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
// - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
// - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

// Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

// Для печатной формы должен содержать строку ПечатьMXL
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("CRM_Печать", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "",CRM_Печать)
// Добавляем команду в таблицу команд по переданному описанию.
// Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
НоваяКоманда.CRM_Печать = CRM_Печать;

КонецПроцедуры
&НаСервере
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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


&НаСервере
Функция СформироватьПечатнуюФорму(Тип, МассивОбъектов, ОбъектыПечати)
Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл
//СсылкаНаОбъект = МассивОбъектов[0];
Попытка
Макет = ПолучитьМакет("ПФ_MXL_Счет");
Исключение
Сообщить("Не очень "+ОписаниеОшибки());
КонецПопытки;
ТабДокумент = Новый ТабличныйДокумент;

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

Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();



ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.ТекстЗаголовка = "Счет на оплату";

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

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

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

Область = Макет.ПолучитьОбласть("ШапкаТаблицы");
//ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
//ОбластьСуммы  = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");

ТабДокумент.Вывести(Область);
//ТабДокумент.Присоединить(ОбластьДанных);
//ТабДокумент.Присоединить(ОбластьСуммы);

//ОбластьКолонкаТовар = Макет.Область("Товар");

Область = Макет.ПолучитьОбласть("Строка");
//ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
//ОбластьСуммы  = Макет.ПолучитьОбласть("Строка|Сумма");

Сумма    = 0;
СуммаНДС = 0;
ВсегоСкидок    = 0;
ВсегоБезСкидок = 0;


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

ЗапросТовары = Запрос.Выполнить().Выгрузить();
  // ЗапросТовары = СформТовары(СсылкаНаОбъект);
Для каждого ВыборкаСтрокТовары Из ЗапросТовары Цикл

Область.Параметры.НомерСтроки = ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1;
//ТабДокумент.Вывести(ОбластьНомера);

Область.Параметры.Заполнить(ВыборкаСтрокТовары);
Область.Параметры.Запас       = СокрЛП(ВыборкаСтрокТовары.Товар);
//ТабДокумент.Присоединить(ОбластьДанных);

//Область.Параметры.Заполнить(ВыборкаСтрокТовары);
//ТабДокумент.Присоединить(ОбластьСуммы);
Сумма          = Сумма       + ВыборкаСтрокТовары.Сумма;
СуммаНДС       = СуммаНДС    + ВыборкаСтрокТовары.СуммаНДС;
       ТабДокумент.Вывести(Область);
КонецЦикла;

// Вывести Итого
Область = Макет.ПолучитьОбласть("Итого");
//ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
//ОбластьСуммы  = Макет.ПолучитьОбласть("Итого");

//ТабДокумент.Вывести(ОбластьНомера);
//ТабДокумент.Присоединить(ОбластьДанных);
Область.Параметры.Всего = Сумма;
ТабДокумент.Вывести(Область);

// Вывести ИтогоНДС
Область = Макет.ПолучитьОбласть("ИтогоНДС");
//ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС");
//ОбластьСуммы  = Макет.ПолучитьОбласть("ИтогоНДС");

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


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

//ТабДокумент.Присоединить(ОбластьСуммы);

// Вывести ИтогоКОплате
Область = Макет.ПолучитьОбласть("ВсегоКОплате");
//ОбластьДанных = Макет.ПолучитьОбласть("ВсегоКОплате|Данные");
//ОбластьСуммы  = Макет.ПолучитьОбласть("ВсегоКОплате");
//ТабДокумент.Вывести(ОбластьНомера);
//ТабДокумент.Присоединить(ОбластьДанных);
СуммаКОплате = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
Область.Параметры.ВсегоКОплате = СуммаКОплате;
ТабДокумент.Вывести(Область);

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

// Вывести подписи
//Если Тип = "Счет" Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");
ТабДокумент.Вывести(ОбластьМакета);
//ТабДокумент.Показать();
   Возврат ТабДокумент;
КонецЦикла;

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

При попытке запуска Печатной формы, появляется ошибка "табличный документ не сформирован"
 
Добрый день, Артем!

вот пример внеш. печ. формы для Счета на оплату, только что проверил ее на CRM 2.0.7 - все работает.
А вообще эта печ. форма есть в демо-базе.
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С