База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как создать внешнюю печатную форму «Счет клиента» с нуля в 1С? › Ответ в теме: Как создать внешнюю печатную форму «Счет клиента» с нуля в 1С?
Сергей, привет!
Вот пример создания внешней печатной формы «Счет клиента» под управляемое приложение 1С, с нуля, без использования шаблонов, с регистрацией в системе и базовой структурой. Я дам тебе полный каркас обработки с основными моментами, чтобы ты мог быстро адаптировать под свои нужды.
—
### 1. Создаем внешнюю обработку (например, «СчетКлиентаВнешний.epf»)
### 2. В модуле обработки создаем экспортную функцию регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = Новый Структура;
// Вид обработки - печатная форма
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
// Назначение - для какого объекта будет доступна печатная форма
ПараметрыРегистрации.Вставить("Назначение", Новый Массив({"Документ.ЗаказКлиента"}));
// Наименование печатной формы в списке
ПараметрыРегистрации.Вставить("Наименование", "Счет клиента (внешний)");
// Версия обработки
ПараметрыРегистрации.Вставить("Версия", "1.0");
// Краткая информация
ПараметрыРегистрации.Вставить("Информация", "Внешняя печатная форма Счет клиента");
// Безопасный режим (лучше Истина)
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
// Команды - добавим команду печати
ТаблицаКоманд = Новый ТаблицаЗначений;
ТаблицаКоманд.Колонки.Добавить("Представление");
ТаблицаКоманд.Колонки.Добавить("Идентификатор");
ТаблицаКоманд.Колонки.Добавить("Использование");
ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение");
ТаблицаКоманд.Колонки.Добавить("Модификатор");
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = "Печать счета клиента";
НоваяКоманда.Идентификатор = "ПечатьСчета";
НоваяКоманда.Использование = "ВызовКлиентскогоМетода"; // вызов процедуры Печать на клиенте
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "";
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
—
### 3. Создаем форму обработки (управляемая форма)
— Добавляем реквизит формы типа «Ссылка» на объект «Документ.ЗаказКлиента» — назовем его `СсылкаНаОбъект`.
— Добавляем кнопку «Печать» с командой «Печать».
—
### 4. В модуле формы пишем процедуру печати:
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт
// Открываем форму с параметрами для печати
ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
ПараметрыОткрытия.ИсточникДанных = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;
ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ИдентификаторКоманды;
ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = МассивОбъектов;
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
КонецПроцедуры
—
### 5. В модуле объекта обработки (модуль обработки) создаем экспортную функцию формирования табличного документа:
Функция ПечатьСчетКлиента(МассивОбъектов) Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок.ВывестиСтроку("Счет клиента");
ТабДок.ВывестиСтроку("Документ: " + МассивОбъектов[0].Номер + " от " + Формат(МассивОбъектов[0].Дата, "ДФ=dd.MM.yyyy"));
ТабДок.ВывестиСтроку("");
ТабДок.ВывестиСтроку("Покупатель: " + МассивОбъектов[0].Контрагент.Наименование);
ТабДок.ВывестиСтроку("Сумма: " + Формат(МассивОбъектов[0].СуммаДокумента, "ЧГ=2"));
// Здесь можно добавить вывод табличной части, реквизитов и т.д.
Возврат ТабДок;
КонецФункции
—
### 6. В модуле формы добавляем вызов печати из объекта:
&НаСервере
Функция Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ТабДок = ПечатьСчетКлиента(МассивОбъектов);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"СчетКлиента",
"Счет клиента",
ТабДок
);
Возврат ТабДок;
КонецФункции
—
### 7. В модуле формы добавляем кнопку «Печать» с обработчиком:
&НаКлиенте
Процедура ПечатьНаКлиенте(Команда)
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаОбъект);
ТабДок = РеквизитФормыВЗначение("Объект").ПечатьСчетКлиента(МассивОбъектов);
ТабДок.Показать("Счет клиента");
КонецПроцедуры
—
### Итог:
— Внешняя печатная форма зарегистрирована и доступна в списке дополнительных печатных форм для документа «Заказ клиента».
— При вызове печати открывается стандартная форма БСП «ПечатьДокументов» с вашим табличным документом.
— Можно отлаживать форму, открывая обработку напрямую и передавая ссылку на документ.
—
Если хочешь, могу скинуть готовый пример обработки, но этот каркас — основа для создания внешних печатных форм в 1С под управляемое приложение.
—
Если нужно, могу помочь с конкретным кодом под твою конфигурацию.
Удачи!