При работе с конфигурациями 1С:Предприятие 8.3 часто возникает необходимость программно управлять созданием документов и их последующим выводом на печать. Особенно это актуально, когда требуется автоматизировать рутинные операции, например, формировать счета на оплату покупателям и сразу же отправлять их в печать или сохранять в файл. В этой статье мы подробно рассмотрим, как реализовать такую функциональность в конфигурации 1С:Бухгалтерия 3.0, используя типовые механизмы платформы и прикладных решений, а также как добавить факсимильные подписи и печати. Для исключения ручного ввода данных можно настроить автоматическое создание счета в 1С:Бухгалтерии 3.0 на основании входящих писем от клиентов.
Предположим, у нас уже есть созданный новый документ, и из него по нажатию кнопки нам необходимо сформировать документ "Счет на оплату покупателю" и вывести его на печать. С созданием нового документа и заполнением его данными мы уже справились. Теперь наша задача — научиться корректно вызывать печатную форму типового документа "Счет на оплату покупателю" и управлять ею.
В большинстве современных конфигураций 1С, основанных на Библиотеке Стандартных Подсистем (БСП), печать документов унифицирована. Для работы с печатными формами используются специализированные общие модули и обработки, такие как УправлениеПечатью и ПечатьДокументов. Эти механизмы позволяют не только формировать табличные документы, но и управлять их выводом, сохранением, а также добавлять дополнительные элементы, например, факсимиле.
Давайте разберем по шагам, как мы можем программно вызвать печать "Счета на оплату покупателю".
Этот подход позволяет нам получить готовый табличный документ, который затем можно либо сразу показать пользователю, либо сохранить в файл, либо отправить на принтер. Мы будем использовать общие модули УправлениеПечатью и обработку печати конкретного документа, в нашем случае – Обработки.ПечатьСчетаНаОплату.
Сначала нам потребуется подготовить коллекцию печатных форм, определить объекты для печати и параметры вывода. Для этого мы используем функции из модуля УправлениеПечатью.
// Предполагается, что СчетНаОплатуСсылка - это ссылка на созданный вами документ "Счет на оплату покупателю"
// Например: СчетНаОплатуСсылка = Документы.СчетНаОплатуПокупателю.НайтиПоНомеру("000000001");
// 1. Подготавливаем коллекцию печатных форм.
// "СчетПокупателю" - это идентификатор макета печатной формы, который обычно соответствует наименованию макета в конфигурации.
// В БП 3.0 для Счета на оплату покупателю часто используется идентификатор "СчетПокупателю".
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетПокупателю");
// 2. Создаем список объектов печати.
// Сюда будут добавлены объекты, для которых формируется печатная форма.
ОбъектыПечати = Новый СписокЗначений;
// 3. Подготавливаем структуру параметров вывода.
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода;
// 4. Создаем массив объектов для печати.
// В этот массив мы добавим ссылку на наш документ "Счет на оплату покупателю".
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СчетНаОплатуСсылка);
// 5. Создаем структуру для дополнительных параметров печати, если они требуются.
// В данном случае, пока оставим ее пустой.
ПараметрыПечати = Новый Структура;
После подготовки всех необходимых параметров мы вызываем процедуру Печать из обработки, ответственной за печать "Счета на оплату покупателю". В БП 3.0 это обычно Обработки.ПечатьСчетаНаОплату.
// Вызываем процедуру печати.
// Параметры: МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода.
Обработки.ПечатьСчетаНаОплату.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Обратите внимание, что в некоторых конфигурациях или версиях имя обработки может отличаться, например, Обработки.ПечатьСчетовНаОплату. Всегда проверяйте актуальное имя в модуле менеджера документа или в соответствующей обработке печати в вашей конфигурации.
После вызова процедуры печати, сформированный табличный документ будет находиться в первом элементе нашей КоллекцияПечатныхФорм. Мы можем получить его и показать пользователю.
// Получаем табличный документ из коллекции.
// КоллекцияПечатныхФорм[0] содержит первый (и в данном случае единственный) сформированный табличный документ.
ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
// Показываем табличный документ пользователю.
ТабДок.Показать();
Этот код позволит нам увидеть печатную форму на экране. С этим ТабДок мы можем делать многое: сохранять, отправлять на принтер и т.д., что мы подробнее рассмотрим далее.
Очень часто требуется, чтобы на печатной форме присутствовали факсимильные изображения подписей и печати. В БП 3.0 для этого также предусмотрен типовой механизм, который значительно упрощает эту задачу. Мы можем использовать функцию ДобавитьФаксимилеВФоне из модуля УправлениеПечатьюБП (или аналогичного, специфичного для вашей конфигурации, например, УправлениеПечатьюУНФ и т.д.).
// Добавляем факсимиле в сформированный табличный документ.
// Первый параметр - сам табличный документ.
// Второй параметр - ссылка на документ, для которого добавляется факсимиле.
// Это важно, так как факсимиле могут быть настроены индивидуально для организаций или документов.
УправлениеПечатьюБП.ДобавитьФаксимилеВФоне(ТабДок, СчетНаОплатуСсылка);
// Снова показываем документ, чтобы увидеть его уже с факсимиле.
ТабДок.Показать();
Важный момент: Убедитесь, что в вашей конфигурации настроены параметры факсимиле (раздел "Главное" - "Организации" - "Логотип и печать" или аналогичный). Без этих настроек факсимиле не будут отображаться.
Если мы хотим использовать стандартный диалог просмотра и печати документов 1С (общая форма "ПечатьДокументов"), который предоставляет пользователю возможности выбора принтера, количества копий, отправки по почте и т.д., то подход будет немного отличаться. В этом случае нам потребуется организовать взаимодействие клиент-сервер.
На стороне клиента мы определяем процедуру, которая будет вызываться, например, по кнопке на форме. Эта процедура будет отвечать за инициацию процесса печати.
&НаКлиенте
Процедура КомандаПечати(Команда)
// Предполагается, что 'Счет' - это реквизит формы, содержащий ссылку на документ "Счет на оплату покупателю"
// Или передаем ссылку другим способом.
ПечатьЧужойФормы(Объект.СсылкаНаСчетНаОплату); // Замените на актуальную ссылку
КонецПроцедуры
&НаКлиенте
Процедура ПечатьЧужойФормы(СчетНаОплатуСсылка)
// Создаем список объектов печати, который будет передан на сервер и обратно.
ОбъектыПечати = Новый СписокЗначений;
// Вызываем серверную функцию для формирования печатных форм.
// Она вернет массив подготовленных печатных форм.
МассивПечатныхФорм = ПечатьЧужойФормыНаСервере(СчетНаОплатуСсылка, ОбъектыПечати);
// Вызываем клиентскую процедуру для открытия общей формы печати документов.
УправлениеПечатьюКлиент.ПечатьДокументов(МассивПечатныхФорм, ОбъектыПечати, ЭтаФорма);
КонецПроцедуры
На сервере без контекста формы мы реализуем функцию, которая формирует коллекцию печатных форм, аналогично первому варианту, но вместо прямого показа возвращает их на клиент в виде массива.
&НаСервереБезКонтекста
Функция ПечатьЧужойФормыНаСервере(СчетНаОплатуСсылка, ОбъектыПечати)
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("СчетПокупателю"); // Или "СчетЗаказ", в зависимости от макета
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода;
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СчетНаОплатуСсылка);
ПараметрыПечати = Новый Структура;
Обработки.ПечатьСчетаНаОплату.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
// Добавляем факсимиле, если необходимо
// Проходим по всем элементам коллекции и добавляем факсимиле
Для Каждого ЭлементКоллекцииПечатныхФорм Из КоллекцияПечатныхФорм Цикл
Если ЭлементКоллекцииПечатныхФорм.ТабличныйДокумент <> Неопределено Тогда
УправлениеПечатьюБП.ДобавитьФаксимилеВФоне(ЭлементКоллекцииПечатныхФорм.ТабличныйДокумент, СчетНаОплатуСсылка);
КонецЕсли;
КонецЦикла;
// Преобразуем коллекцию печатных форм в массив, чтобы передать на клиент
МассивПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм);
Возврат МассивПечатныхФорм;
КонецФункции
Этот подход более гибок, поскольку он использует стандартный интерфейс печати, к которому пользователи уже привыкли.
В некоторых конфигурациях, например, 1С:УНФ, могут использоваться свои специфические общие модули для печати, хотя общий принцип остается тем же. Давайте рассмотрим пример для 1С:УНФ, который также демонстрирует передачу множества параметров для тонкой настройки процесса печати.
&НаКлиенте
Процедура ПечатьСчетаНаОплату(Команда)
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("Форма", ЭтаФорма);
// 'Объект.СчетНаОплату' - это реквизит текущего объекта, содержащий ссылку на документ "Счет на оплату"
ПараметрыПечати.Вставить("ОбъектыПечати", ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.СчетНаОплату));
ПараметрыПечати.Вставить("Идентификатор", "СчетНаОплату"); // Идентификатор печатной формы
ПараметрыПечати.Вставить("МенеджерПечати", "Документ.СчетНаОплату"); // Менеджер объекта для печати
ПараметрыПечати.Вставить("Обработчик", "ПечатьДокументовУНФКлиент.ПредложитьЗаполнитьРеквизитыОрганизации"); // Дополнительный обработчик
ПараметрыПечати.Вставить("СразуНаПринтер", Ложь); // Не печатать сразу на принтер
ПараметрыПечати.Вставить("ФорматСохранения", ""); // Формат сохранения файла
ПараметрыПечати.Вставить("ЗаголовокФормы", ""); // Заголовок формы печати
ПараметрыПечати.Вставить("ПереопределитьПользовательскиеНастройкиКоличества", Ложь);
ПараметрыПечати.Вставить("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь);
ПараметрыПечати.Вставить("ФиксированныйКомплект", Ложь);
ПараметрыПечати.Вставить("ДополнительныеПараметры", Новый Структура("ДополнитьКомплектВнешнимиПечатнымиФормами", Ложь));
// Вызываем клиентскую процедуру для предложения заполнить реквизиты организации и последующей печати.
ПечатьДокументовУНФКлиент.ПредложитьЗаполнитьРеквизитыОрганизации(ПараметрыПечати);
КонецПроцедуры
Этот пример показывает, что для разных конфигураций могут быть свои нюансы и специфические процедуры, но общая логика работы с параметрами печати и вызовом функций остаётся схожей.
Помимо рассмотренных выше методов, важно учитывать и другие аспекты, которые могут повлиять на процесс программного формирования и вывода печатных форм.
Заполнение обязательных реквизитов: Перед тем как отправлять документ на печать, всегда убеждаемся, что все обязательные реквизиты, такие как подписи ответственных лиц (руководитель, бухгалтер), данные организации, ИНН, КПП и т.д., заполнены. Эти настройки, как правило, устанавливаются по умолчанию в разделе "Главное" - "Реквизиты организации" или "Организации" в типовых конфигурациях 1С.
Пустые поля: Если необходимые данные не заполнены в информационной базе, соответствующие поля в печатной форме останутся пустыми, что может привести к недействительности документа.
Создание уникальных форм: Когда типовых печатных форм недостаточно или требуется специфический внешний вид, часто используются внешние печатные формы (ВПФ). Это отдельные файлы с расширением .epf, создаваемые в режиме "Конфигуратор".
Подключение ВПФ: Подключение внешних печатных форм к конфигурации происходит через пользовательский режим: "Администрирование" -> "Настройки программы" -> "Печатные формы, отчеты и обработки". Здесь необходимо установить флажок "Дополнительные отчеты и обработки" и добавить ваш файл ВПФ.
Параметры процедуры печати для ВПФ: Процедура печати для внешних печатных форм обычно имеет четыре ключевых параметра: МассивОбъектов (документы для печати), КоллекцияПечатныхФорм (куда будут добавляться сформированные табличные документы), ОбъектыПечати (дополнительные параметры для печати), ПараметрыВывода (параметры для вывода на экран или принтер).
Преимущества ВПФ: Использование ВПФ позволяет сохранить типовую конфигурацию от изменений, тем самым обеспечивая совместимость с обновлениями 1С, и централизовать индивидуальную логику печати. При работе с большим количеством баз выполнять регулярное автоматическое обновление и архивирование 1С удобнее в пакетном режиме по расписанию.
Форматы сохранения: После того как вы получили объект ТабличныйДокумент, его можно не только показать, но и сохранить в файл различных форматов: .mxl (собственный формат 1С), .xls (Microsoft Excel), .htm (HTML) и .pdf. Для сохранения используйте метод Записать() объекта ТабличныйДокумент с указанием желаемого формата.
Просмотр .mxl: Для просмотра файлов .mxl на компьютерах, где не установлена 1С, можно использовать бесплатную программу "1С:Предприятие - Работа с файлами".
Особенности сохранения в Excel: При программном сохранении в Excel могут возникать проблемы, например, даты могут сохраняться как текстовые строки, а не как формат даты. Это требует дополнительной обработки или настройки макета.
Гибкая настройка: Внешние обработки и типовые механизмы печати позволяют гибко настраивать и автоматизировать процесс. Параметры, такие как макеты, количество копий, фильтрация данных, обычно передаются через структуру ПараметрыПечати.
Массовая печать: Для ускорения рутинных процессов и снижения влияния человеческого фактора можно реализовать массовую печать документов, передавая в МассивОбъектов несколько ссылок на документы.
Без диалога: Если необходимо отправить документ сразу на принтер без предварительного показа пользователю, можно использовать метод ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать).
С диалогом: Для вызова стандартного диалога печати используйте ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать) или клиентские процедуры, как в примере с УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер().
Структура макетов: Макеты печатных форм состоят из различных областей (например, "Шапка", "ДанныеСтрок", "ИтогиСтрок", "Подвал"). Эти области заполняются данными из документа с помощью метода Вывести() и затем выводятся в табличный документ.
Редактирование макета: Внешний вид печатной формы, включая логотипы, печати, подписи, текст, шрифты и размеры ячеек, настраивается в Конфигураторе при редактировании макета. Здесь же можно управлять автоматической высотой строк и объединением ячеек.
Области печати: Можно задавать определенные области печати, чтобы на принтер выводилась только часть документа, что полезно для многостраничных форм.
Мы рассмотрели различные подходы к программному формированию и выводу печатных форм в 1С:Предприятие 8.3 на примере документа "Счет на оплату покупателю" в конфигурации 1С:Бухгалтерия 3.0. Мы научились использовать общие модули УправлениеПечатью и УправлениеПечатьюБП для прямого вывода табличного документа и добавления факсимиле, а также для интеграции со стандартной формой печати документов. Помните, что глубокое понимание механизмов БСП и умение работать с внешними печатными формами и табличными документами являются ключевыми навыками для эффективной автоматизации в 1С.
Применяя эти знания, вы сможете значительно расширить функциональность ваших решений, автоматизировать рутинные процессы и создавать удобные инструменты для пользователей. Для выполнения повторяющихся операций в интерфейсе программ без API применяют платформу RPA для роботизации формирования документов и других действий пользователя.