Внешняя печатная форма
Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.
Доступ к форуму партнерам «1C-Рарус» по дистрибуции предоставляется на сайте
rarus-soft.ru
Читают тему
Столкнулся с тем что выскакивает ошибка:
{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(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 - все работает.
А вообще эта печ. форма есть в демо-базе.
Прикрепленные файлы