Создание печатной формы для юридических документов, таких как договор уступки права (цессии), аренды или купли-продажи, часто вызывает вопросы у начинающих разработчиков. Основная сложность заключается в том, что такой документ представляет собой не классическую таблицу с колонками «Номенклатура» и «Количество», а сплошной массив текста, в который нужно «вкраплять» данные из системы (даты, номера, ФИО, суммы). Рассмотрим подробнее, как реализовать такую задачу с помощью механизмов 1С.
Многие ошибочно полагают, что ТабличныйДокумент предназначен только для отчетов и накладных. На самом деле, это мощный инструмент для верстки любых текстов. Разберем по шагам, как превратить таблицу в полноценный текстовый договор.
Во-первых, создадим макет в нашей внешней обработке. Чтобы текст не выглядел «разорванным» по ячейкам, проанализируем настройки форматирования. Мы можем выделить широкую область (например, колонки с A по H) и объединить их. Однако более профессиональный подход — задать ширину колонок так, чтобы основная текстовая область занимала всю ширину страницы А4.
Во-вторых, обратим внимание на свойство «Размещение текста». Для ячеек, в которых будет располагаться основной текст договора, необходимо установить значение «Переносить». Это позволит платформе автоматически распределять текст по строкам внутри ячейки, как в обычном текстовом редакторе.
Для вставки динамических данных используем параметры. В тексте макета пишем названия параметров в квадратных скобках, например: "Настоящий договор № [НомерДокумента] от [ДатаДокумента] г.". Проанализируем процесс заполнения таких параметров в коде:
// Получаем область макета
ОбластьТекст = Макет.ПолучитьОбласть("ОсновнойТекст");
// Подготавливаем данные
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("НомерДокумента", ОбъектСсылка.Номер);
СтруктураДанных.Вставить("ДатаДокумента", Формат(ОбъектСсылка.Дата, "ДЛФ=DD"));
// Заполняем параметры области сразу из структуры
ОбластьТекст.Параметры.Заполнить(СтруктураДанных);
// Выводим в итоговый документ
ТабДок.Вывести(ОбластьТекст);
Если юристы компании настаивают на возможности ручного редактирования сформированного договора, логично рассмотреть вариант с использованием Word. Рассмотрим два способа взаимодействия с этим форматом.
Способ через COM-соединение: Это классический метод, когда 1С запускает установленный на компьютере MS Word, открывает файл-шаблон и ищет в нем текстовые метки для замены. Однако у этого способа есть существенные минусы: он требует наличия MS Office на сервере или клиенте, работает медленно и подвержен зависаниям фоновых процессов.
Современный способ (Двоичные данные): Начиная с версии платформы 8.3.15, мы можем работать с файлами .docx напрямую. Файл .docx — это, по сути, архив с XML-файлами внутри. 1С умеет распаковывать его программно, находить теги и заменять их на нужные значения. Это работает молниеносно и не требует стороннего ПО. Для реализации этого метода в макет внешней обработки загружается файл Word как «Двоичные данные».
Выясним причину, по которой иногда выбирают HTML. Если в договоре требуется специфическое межстрочное расстояние, использование нескольких разных шрифтов в одном абзаце или вставка сложных списков, HTML-разметка справится с этим лучше, чем MXL. Вы можете создать макет типа «HTML-документ», вставить туда верстку с CSS-стилями и использовать стандартный механизм замены подстрок (функция СтрЗаменить) для вставки данных.
Особое внимание в договоре уступки права следует уделить корректности личных данных и финансовых сумм. Посмотрим на примеры использования встроенных функций:
1. Склонение ФИО: В договоре часто требуется написать «в лице Иванова Ивана Ивановича» (родительный падеж). Если в конфигурации используется БСП (Библиотека стандартных подсистем), проанализируем вызов функции склонения:
// Используем программный интерфейс БСП для получения ФИО в нужном падеже
РезультатСклонения = ФизическиеЛица.Просклонять(ФИОПодписанта, 2); // 2 - Родительный падеж
2. Сумма прописью: Для финансовых обязательств обязательно дублирование суммы текстом. В 1С это реализуется функцией ЧислоПрописью. Выясним, как правильно передать параметры валюты:
ПараметрыВалюты = "L=ru_RU; SN=рубль, рубля, рублей; SS=копейка, копейки, копеек; SD=2";
ТекстСуммы = ЧислоПрописью(СуммаДоговора, "L=ru_RU", ПараметрыВалюты);
Чтобы наша печатная форма корректно зарегистрировалась в системе, необходимо правильно оформить модуль объекта внешней обработки. Основным элементом здесь является функция СведенияОВнешнейОбработке.
Рассмотрим обязательную структуру этой функции:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг"); // Указываем свой документ
ПараметрыРегистрации.Наименование = "Договор уступки права (цессии)";
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Печать договора цессии";
НоваяКоманда.Идентификатор = "ДоговорЦессии";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
После регистрации системы вызовет экспортную процедуру Печать, в которой мы и опишем логику формирования нашего документа. Важно помнить, что процедура принимает массив ссылок, поэтому мы должны предусмотреть цикл для массовой печати документов пользователем.
Таким образом, создание текстовой формы сводится к грамотной настройке макета и использованию стандартных функций платформы и БСП для подготовки данных. Выбор между MXL и Word зависит от того, требуется ли пользователям дальнейшая правка текста вручную.