База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как создать внешнюю печатную форму «Счет клиента» для 1С? › Ответ в теме: Как создать внешнюю печатную форму «Счет клиента» для 1С?
Сергей, привет!
Вот пример создания внешней печатной формы «Счет клиента» под управляемое приложение 1С, с нуля, без использования шаблонов, с регистрацией в системе и базовой структурой. Я дам тебе полный каркас обработки с основными моментами, чтобы ты мог быстро адаптировать под свои нужды.
—
### 1. Создаем внешнюю обработку (например, «СчетКлиентаВнешний.epf»)
### 2. В модуле обработки создаем экспортную функцию регистрации:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; // Вид обработки - печатная форма ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); // Назначение - для какого объекта будет доступна печатная форма ПараметрыРегистрации.Вставить("Назначение", Новый Массив({"Документ.ЗаказКлиента"})); // Наименование печатной формы в списке ПараметрыРегистрации.Вставить("Наименование", "Счет клиента (внешний)"); // Версия обработки ПараметрыРегистрации.Вставить("Версия", "1.0"); // Краткая информация ПараметрыРегистрации.Вставить("Информация", "Внешняя печатная форма Счет клиента"); // Безопасный режим (лучше Истина) ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); // Команды - добавим команду печати ТаблицаКоманд = Новый ТаблицаЗначений; ТаблицаКоманд.Колонки.Добавить("Представление"); ТаблицаКоманд.Колонки.Добавить("Идентификатор"); ТаблицаКоманд.Колонки.Добавить("Использование"); ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение"); ТаблицаКоманд.Колонки.Добавить("Модификатор"); НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда.Представление = "Печать счета клиента"; НоваяКоманда.Идентификатор = "ПечатьСчета"; НоваяКоманда.Использование = "ВызовКлиентскогоМетода"; // вызов процедуры Печать на клиенте НоваяКоманда.ПоказыватьОповещение = Истина; НоваяКоманда.Модификатор = ""; ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции |
—
### 3. Создаем форму обработки (управляемая форма)
— Добавляем реквизит формы типа «Ссылка» на объект «Документ.ЗаказКлиента» — назовем его СсылкаНаОбъект.
— Добавляем кнопку «Печать» с командой «Печать».
—
### 4. В модуле формы пишем процедуру печати:
|
1 2 3 4 5 6 7 8 9 10 11 |
&НаКлиенте Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт // Открываем форму с параметрами для печати ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника"); ПараметрыОткрытия.ИсточникДанных = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка; ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения"); ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ИдентификаторКоманды; ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = МассивОбъектов; ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия); КонецПроцедуры |
—
### 5. В модуле объекта обработки (модуль обработки) создаем экспортную функцию формирования табличного документа:
|
1 2 3 4 5 6 7 8 9 10 11 |
Функция ПечатьСчетКлиента(МассивОбъектов) Экспорт ТабДок = Новый ТабличныйДокумент; ТабДок.ВывестиСтроку("Счет клиента"); ТабДок.ВывестиСтроку("Документ: " + МассивОбъектов[0].Номер + " от " + Формат(МассивОбъектов[0].Дата, "ДФ=dd.MM.yyyy")); ТабДок.ВывестиСтроку(""); ТабДок.ВывестиСтроку("Покупатель: " + МассивОбъектов[0].Контрагент.Наименование); ТабДок.ВывестиСтроку("Сумма: " + Формат(МассивОбъектов[0].СуммаДокумента, "ЧГ=2")); // Здесь можно добавить вывод табличной части, реквизитов и т.д. Возврат ТабДок; КонецФункции |
—
### 6. В модуле формы добавляем вызов печати из объекта:
|
1 2 3 4 5 6 7 8 9 10 11 |
&НаСервере Функция Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ТабДок = ПечатьСчетКлиента(МассивОбъектов); УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, "СчетКлиента", "Счет клиента", ТабДок ); Возврат ТабДок; КонецФункции |
—
### 7. В модуле формы добавляем кнопку «Печать» с обработчиком:
|
1 2 3 4 5 6 7 |
&НаКлиенте Процедура ПечатьНаКлиенте(Команда) МассивОбъектов = Новый Массив; МассивОбъектов.Добавить(СсылкаНаОбъект); ТабДок = РеквизитФормыВЗначение("Объект").ПечатьСчетКлиента(МассивОбъектов); ТабДок.Показать("Счет клиента"); КонецПроцедуры |
—
### Итог:
— Внешняя печатная форма зарегистрирована и доступна в списке дополнительных печатных форм для документа «Заказ клиента».
— При вызове печати открывается стандартная форма БСП «ПечатьДокументов» с вашим табличным документом.
— Можно отлаживать форму, открывая обработку напрямую и передавая ссылку на документ.
—
Если хочешь, могу скинуть готовый пример обработки, но этот каркас — основа для создания внешних печатных форм в 1С под управляемое приложение.
—
Если нужно, могу помочь с конкретным кодом под твою конфигурацию.
Удачи!