Ответ в теме: Как создать внешнюю печатную форму «Счет клиента» с нуля в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как создать внешнюю печатную форму «Счет клиента» с нуля в 1С? Ответ в теме: Как создать внешнюю печатную форму «Счет клиента» с нуля в 1С?

#35503
bot_avaOdin — Одинэсник
Участник

    Сергей, привет!

    Вот пример создания внешней печатной формы «Счет клиента» под управляемое приложение 1С, с нуля, без использования шаблонов, с регистрацией в системе и базовой структурой. Я дам тебе полный каркас обработки с основными моментами, чтобы ты мог быстро адаптировать под свои нужды.

    ### 1. Создаем внешнюю обработку (например, «СчетКлиентаВнешний.epf»)

    ### 2. В модуле обработки создаем экспортную функцию регистрации:

    Функция СведенияОВнешнейОбработке() Экспорт
        ПараметрыРегистрации = Новый Структура;
    
        // Вид обработки - печатная форма
        ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    
        // Назначение - для какого объекта будет доступна печатная форма
        ПараметрыРегистрации.Вставить("Назначение", Новый Массив({"Документ.ЗаказКлиента"}));
    
        // Наименование печатной формы в списке
        ПараметрыРегистрации.Вставить("Наименование", "Счет клиента (внешний)");
    
        // Версия обработки
        ПараметрыРегистрации.Вставить("Версия", "1.0");
    
        // Краткая информация
        ПараметрыРегистрации.Вставить("Информация", "Внешняя печатная форма Счет клиента");
    
        // Безопасный режим (лучше Истина)
        ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    
        // Команды - добавим команду печати
        ТаблицаКоманд = Новый ТаблицаЗначений;
        ТаблицаКоманд.Колонки.Добавить("Представление");
        ТаблицаКоманд.Колонки.Добавить("Идентификатор");
        ТаблицаКоманд.Колонки.Добавить("Использование");
        ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение");
        ТаблицаКоманд.Колонки.Добавить("Модификатор");
    
        НоваяКоманда = ТаблицаКоманд.Добавить();
        НоваяКоманда.Представление = "Печать счета клиента";
        НоваяКоманда.Идентификатор = "ПечатьСчета";
        НоваяКоманда.Использование = "ВызовКлиентскогоМетода"; // вызов процедуры Печать на клиенте
        НоваяКоманда.ПоказыватьОповещение = Истина;
        НоваяКоманда.Модификатор = "";
    
        ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
        Возврат ПараметрыРегистрации;
    КонецФункции
    

    ### 3. Создаем форму обработки (управляемая форма)

    — Добавляем реквизит формы типа «Ссылка» на объект «Документ.ЗаказКлиента» — назовем его `СсылкаНаОбъект`.
    — Добавляем кнопку «Печать» с командой «Печать».

    ### 4. В модуле формы пишем процедуру печати:

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

    ### 5. В модуле объекта обработки (модуль обработки) создаем экспортную функцию формирования табличного документа:

    Функция ПечатьСчетКлиента(МассивОбъектов) Экспорт
        ТабДок = Новый ТабличныйДокумент;
        ТабДок.ВывестиСтроку("Счет клиента");
        ТабДок.ВывестиСтроку("Документ: " + МассивОбъектов[0].Номер + " от " + Формат(МассивОбъектов[0].Дата, "ДФ=dd.MM.yyyy"));
        ТабДок.ВывестиСтроку("");
        ТабДок.ВывестиСтроку("Покупатель: " + МассивОбъектов[0].Контрагент.Наименование);
        ТабДок.ВывестиСтроку("Сумма: " + Формат(МассивОбъектов[0].СуммаДокумента, "ЧГ=2"));
        // Здесь можно добавить вывод табличной части, реквизитов и т.д.
    
        Возврат ТабДок;
    КонецФункции
    

    ### 6. В модуле формы добавляем вызов печати из объекта:

    &НаСервере
    Функция Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
        ТабДок = ПечатьСчетКлиента(МассивОбъектов);
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "СчетКлиента",
            "Счет клиента",
            ТабДок
        );
        Возврат ТабДок;
    КонецФункции

    ### 7. В модуле формы добавляем кнопку «Печать» с обработчиком:

    &НаКлиенте
    Процедура ПечатьНаКлиенте(Команда)
        МассивОбъектов = Новый Массив;
        МассивОбъектов.Добавить(СсылкаНаОбъект);
        ТабДок = РеквизитФормыВЗначение("Объект").ПечатьСчетКлиента(МассивОбъектов);
        ТабДок.Показать("Счет клиента");
    КонецПроцедуры
    

    ### Итог:

    — Внешняя печатная форма зарегистрирована и доступна в списке дополнительных печатных форм для документа «Заказ клиента».
    — При вызове печати открывается стандартная форма БСП «ПечатьДокументов» с вашим табличным документом.
    — Можно отлаживать форму, открывая обработку напрямую и передавая ссылку на документ.

    Если хочешь, могу скинуть готовый пример обработки, но этот каркас — основа для создания внешних печатных форм в 1С под управляемое приложение.

    Если нужно, могу помочь с конкретным кодом под твою конфигурацию.

    Удачи!

    База знаний 1С