Как программно создать и вывести на печать документ "Счет на оплату покупателю" в 1С:Бухгалтерия 3.0, включая факсимиле?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе с конфигурациями 1С:Предприятие 8.3 часто возникает необходимость программно управлять созданием документов и их последующим выводом на печать. Особенно это актуально, когда требуется автоматизировать рутинные операции, например, формировать счета на оплату покупателям и сразу же отправлять их в печать или сохранять в файл. В этой статье мы подробно рассмотрим, как реализовать такую функциональность в конфигурации 1С:Бухгалтерия 3.0, используя типовые механизмы платформы и прикладных решений, а также как добавить факсимильные подписи и печати. Для исключения ручного ввода данных можно настроить автоматическое создание счета в 1С:Бухгалтерии 3.0 на основании входящих писем от клиентов.

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

Основы работы с печатными формами в 1С:Библиотеке Стандартных Подсистем (БСП)

В большинстве современных конфигураций 1С, основанных на Библиотеке Стандартных Подсистем (БСП), печать документов унифицирована. Для работы с печатными формами используются специализированные общие модули и обработки, такие как УправлениеПечатью и ПечатьДокументов. Эти механизмы позволяют не только формировать табличные документы, но и управлять их выводом, сохранением, а также добавлять дополнительные элементы, например, факсимиле.

Давайте разберем по шагам, как мы можем программно вызвать печать "Счета на оплату покупателю".

Вариант 1: Прямой вывод табличного документа

Этот подход позволяет нам получить готовый табличный документ, который затем можно либо сразу показать пользователю, либо сохранить в файл, либо отправить на принтер. Мы будем использовать общие модули УправлениеПечатью и обработку печати конкретного документа, в нашем случае – Обработки.ПечатьСчетаНаОплату.

Шаг 1: Подготовка параметров для печати

Сначала нам потребуется подготовить коллекцию печатных форм, определить объекты для печати и параметры вывода. Для этого мы используем функции из модуля УправлениеПечатью.


// Предполагается, что СчетНаОплатуСсылка - это ссылка на созданный вами документ "Счет на оплату покупателю"
// Например: СчетНаОплатуСсылка = Документы.СчетНаОплатуПокупателю.НайтиПоНомеру("000000001");

// 1. Подготавливаем коллекцию печатных форм.
// "СчетПокупателю" - это идентификатор макета печатной формы, который обычно соответствует наименованию макета в конфигурации.
// В БП 3.0 для Счета на оплату покупателю часто используется идентификатор "СчетПокупателю".
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетПокупателю");

// 2. Создаем список объектов печати.
// Сюда будут добавлены объекты, для которых формируется печатная форма.
ОбъектыПечати = Новый СписокЗначений;

// 3. Подготавливаем структуру параметров вывода.
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода;

// 4. Создаем массив объектов для печати.
// В этот массив мы добавим ссылку на наш документ "Счет на оплату покупателю".
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СчетНаОплатуСсылка);

// 5. Создаем структуру для дополнительных параметров печати, если они требуются.
// В данном случае, пока оставим ее пустой.
ПараметрыПечати = Новый Структура;

Шаг 2: Вызов процедуры печати

После подготовки всех необходимых параметров мы вызываем процедуру Печать из обработки, ответственной за печать "Счета на оплату покупателю". В БП 3.0 это обычно Обработки.ПечатьСчетаНаОплату.


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

Обратите внимание, что в некоторых конфигурациях или версиях имя обработки может отличаться, например, Обработки.ПечатьСчетовНаОплату. Всегда проверяйте актуальное имя в модуле менеджера документа или в соответствующей обработке печати в вашей конфигурации.

Шаг 3: Получение и отображение табличного документа

После вызова процедуры печати, сформированный табличный документ будет находиться в первом элементе нашей КоллекцияПечатныхФорм. Мы можем получить его и показать пользователю.


// Получаем табличный документ из коллекции.
// КоллекцияПечатныхФорм[0] содержит первый (и в данном случае единственный) сформированный табличный документ.
ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;

// Показываем табличный документ пользователю.
ТабДок.Показать();

Этот код позволит нам увидеть печатную форму на экране. С этим ТабДок мы можем делать многое: сохранять, отправлять на принтер и т.д., что мы подробнее рассмотрим далее.

Добавление факсимильных подписей и печатей

Очень часто требуется, чтобы на печатной форме присутствовали факсимильные изображения подписей и печати. В БП 3.0 для этого также предусмотрен типовой механизм, который значительно упрощает эту задачу. Мы можем использовать функцию ДобавитьФаксимилеВФоне из модуля УправлениеПечатьюБП (или аналогичного, специфичного для вашей конфигурации, например, УправлениеПечатьюУНФ и т.д.).


// Добавляем факсимиле в сформированный табличный документ.
// Первый параметр - сам табличный документ.
// Второй параметр - ссылка на документ, для которого добавляется факсимиле.
// Это важно, так как факсимиле могут быть настроены индивидуально для организаций или документов.
УправлениеПечатьюБП.ДобавитьФаксимилеВФоне(ТабДок, СчетНаОплатуСсылка);

// Снова показываем документ, чтобы увидеть его уже с факсимиле.
ТабДок.Показать();

Важный момент: Убедитесь, что в вашей конфигурации настроены параметры факсимиле (раздел "Главное" - "Организации" - "Логотип и печать" или аналогичный). Без этих настроек факсимиле не будут отображаться.

Вариант 2: Использование общей формы "Печать документов"

Если мы хотим использовать стандартный диалог просмотра и печати документов 1С (общая форма "ПечатьДокументов"), который предоставляет пользователю возможности выбора принтера, количества копий, отправки по почте и т.д., то подход будет немного отличаться. В этом случае нам потребуется организовать взаимодействие клиент-сервер.

Шаг 1: Клиентская процедура вызова

На стороне клиента мы определяем процедуру, которая будет вызываться, например, по кнопке на форме. Эта процедура будет отвечать за инициацию процесса печати.


&НаКлиенте
Процедура КомандаПечати(Команда)
    // Предполагается, что 'Счет' - это реквизит формы, содержащий ссылку на документ "Счет на оплату покупателю"
    // Или передаем ссылку другим способом.
    ПечатьЧужойФормы(Объект.СсылкаНаСчетНаОплату); // Замените на актуальную ссылку
КонецПроцедуры

&НаКлиенте
Процедура ПечатьЧужойФормы(СчетНаОплатуСсылка)
    // Создаем список объектов печати, который будет передан на сервер и обратно.
    ОбъектыПечати = Новый СписокЗначений;

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

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

Шаг 2: Серверная функция формирования печатных форм

На сервере без контекста формы мы реализуем функцию, которая формирует коллекцию печатных форм, аналогично первому варианту, но вместо прямого показа возвращает их на клиент в виде массива.


&НаСервереБезКонтекста
Функция ПечатьЧужойФормыНаСервере(СчетНаОплатуСсылка, ОбъектыПечати)

    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетПокупателю"); // Или "СчетЗаказ", в зависимости от макета
    ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода;

    МассивОбъектов = Новый Массив;
    МассивОбъектов.Добавить(СчетНаОплатуСсылка);

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

    // Добавляем факсимиле, если необходимо
    // Проходим по всем элементам коллекции и добавляем факсимиле
    Для Каждого ЭлементКоллекцииПечатныхФорм Из КоллекцияПечатныхФорм Цикл
        Если ЭлементКоллекцииПечатныхФорм.ТабличныйДокумент <> Неопределено Тогда
            УправлениеПечатьюБП.ДобавитьФаксимилеВФоне(ЭлементКоллекцииПечатныхФорм.ТабличныйДокумент, СчетНаОплатуСсылка);
        КонецЕсли;
    КонецЦикла;

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

Этот подход более гибок, поскольку он использует стандартный интерфейс печати, к которому пользователи уже привыкли.

Вариант 3: Пример для 1С:УНФ (Управление нашей фирмой)

В некоторых конфигурациях, например, 1С:УНФ, могут использоваться свои специфические общие модули для печати, хотя общий принцип остается тем же. Давайте рассмотрим пример для 1С:УНФ, который также демонстрирует передачу множества параметров для тонкой настройки процесса печати.


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

    // Вызываем клиентскую процедуру для предложения заполнить реквизиты организации и последующей печати.
    ПечатьДокументовУНФКлиент.ПредложитьЗаполнитьРеквизитыОрганизации(ПараметрыПечати);
КонецПроцедуры

Этот пример показывает, что для разных конфигураций могут быть свои нюансы и специфические процедуры, но общая логика работы с параметрами печати и вызовом функций остаётся схожей.

Дополнительные аспекты работы с печатными формами

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

Настройка и реквизиты печатной формы

  1. Заполнение обязательных реквизитов: Перед тем как отправлять документ на печать, всегда убеждаемся, что все обязательные реквизиты, такие как подписи ответственных лиц (руководитель, бухгалтер), данные организации, ИНН, КПП и т.д., заполнены. Эти настройки, как правило, устанавливаются по умолчанию в разделе "Главное" - "Реквизиты организации" или "Организации" в типовых конфигурациях 1С.

  2. Пустые поля: Если необходимые данные не заполнены в информационной базе, соответствующие поля в печатной форме останутся пустыми, что может привести к недействительности документа.

Работа с внешними печатными формами (ВПФ)

  1. Создание уникальных форм: Когда типовых печатных форм недостаточно или требуется специфический внешний вид, часто используются внешние печатные формы (ВПФ). Это отдельные файлы с расширением .epf, создаваемые в режиме "Конфигуратор".

  2. Подключение ВПФ: Подключение внешних печатных форм к конфигурации происходит через пользовательский режим: "Администрирование" -> "Настройки программы" -> "Печатные формы, отчеты и обработки". Здесь необходимо установить флажок "Дополнительные отчеты и обработки" и добавить ваш файл ВПФ.

  3. Параметры процедуры печати для ВПФ: Процедура печати для внешних печатных форм обычно имеет четыре ключевых параметра: МассивОбъектов (документы для печати), КоллекцияПечатныхФорм (куда будут добавляться сформированные табличные документы), ОбъектыПечати (дополнительные параметры для печати), ПараметрыВывода (параметры для вывода на экран или принтер).

  4. Преимущества ВПФ: Использование ВПФ позволяет сохранить типовую конфигурацию от изменений, тем самым обеспечивая совместимость с обновлениями 1С, и централизовать индивидуальную логику печати. При работе с большим количеством баз выполнять регулярное автоматическое обновление и архивирование 1С удобнее в пакетном режиме по расписанию.

Сохранение и вывод табличного документа

  1. Форматы сохранения: После того как вы получили объект ТабличныйДокумент, его можно не только показать, но и сохранить в файл различных форматов: .mxl (собственный формат 1С), .xls (Microsoft Excel), .htm (HTML) и .pdf. Для сохранения используйте метод Записать() объекта ТабличныйДокумент с указанием желаемого формата.

  2. Просмотр .mxl: Для просмотра файлов .mxl на компьютерах, где не установлена 1С, можно использовать бесплатную программу "1С:Предприятие - Работа с файлами".

  3. Особенности сохранения в Excel: При программном сохранении в Excel могут возникать проблемы, например, даты могут сохраняться как текстовые строки, а не как формат даты. Это требует дополнительной обработки или настройки макета.

Параметры печати и их автоматизация

  1. Гибкая настройка: Внешние обработки и типовые механизмы печати позволяют гибко настраивать и автоматизировать процесс. Параметры, такие как макеты, количество копий, фильтрация данных, обычно передаются через структуру ПараметрыПечати.

  2. Массовая печать: Для ускорения рутинных процессов и снижения влияния человеческого фактора можно реализовать массовую печать документов, передавая в МассивОбъектов несколько ссылок на документы.

Прямая печать на принтер

  1. Без диалога: Если необходимо отправить документ сразу на принтер без предварительного показа пользователю, можно использовать метод ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать).

  2. С диалогом: Для вызова стандартного диалога печати используйте ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать) или клиентские процедуры, как в примере с УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер().

Работа с макетами и областями печати

  1. Структура макетов: Макеты печатных форм состоят из различных областей (например, "Шапка", "ДанныеСтрок", "ИтогиСтрок", "Подвал"). Эти области заполняются данными из документа с помощью метода Вывести() и затем выводятся в табличный документ.

  2. Редактирование макета: Внешний вид печатной формы, включая логотипы, печати, подписи, текст, шрифты и размеры ячеек, настраивается в Конфигураторе при редактировании макета. Здесь же можно управлять автоматической высотой строк и объединением ячеек.

  3. Области печати: Можно задавать определенные области печати, чтобы на принтер выводилась только часть документа, что полезно для многостраничных форм.

Заключение

Мы рассмотрели различные подходы к программному формированию и выводу печатных форм в 1С:Предприятие 8.3 на примере документа "Счет на оплату покупателю" в конфигурации 1С:Бухгалтерия 3.0. Мы научились использовать общие модули УправлениеПечатью и УправлениеПечатьюБП для прямого вывода табличного документа и добавления факсимиле, а также для интеграции со стандартной формой печати документов. Помните, что глубокое понимание механизмов БСП и умение работать с внешними печатными формами и табличными документами являются ключевыми навыками для эффективной автоматизации в 1С.

Применяя эти знания, вы сможете значительно расширить функциональность ваших решений, автоматизировать рутинные процессы и создавать удобные инструменты для пользователей. Для выполнения повторяющихся операций в интерфейсе программ без API применяют платформу RPA для роботизации формирования документов и других действий пользователя.

← На главную