При разработке печатных форм в 1С программисты часто сталкиваются с ситуацией, когда заказчик предоставляет эталонный образец в формате Microsoft Word. Проблема заключается в том, что механизмы рендеринга текста и таблиц в Word и 1С существенно различаются. Прямое копирование «ctrl+c — ctrl+v» часто приводит к «разваливанию» структуры, потере шрифтов и нарушению пропорций. Рассмотрим подробнее основные методики, которые позволят нам создать максимально идентичный макет в 1С, минимизируя претензии со стороны заказчика.
Хотя автор темы изначально сомневался в эффективности этого способа, на практике он является одним из самых быстрых для первичного переноса структуры. Разберем этот процесс по шагам:
ТабличныйДокумент). После этого нам останется лишь подправить толщину линий и шрифты.Проанализируем наиболее эффективный способ для случаев, когда заказчик требует соответствия «пиксель в пиксель». Если ручная отрисовка не дает нужного результата из-за сложности отступов, мы можем использовать визуальный ориентир.
Разберем алгоритм действий:
ТабличногоДокумента идеально совпадала с линиями на картинке.Этот метод позволяет добиться безупречного совпадения всех элементов, так как мы буквально «обводим» оригинал.
Если нам необходимо переносить множество однотипных таблиц, целесообразно использовать средства автоматизации. Мы можем написать обработку, которая просканирует документ Word и создаст аналогичную структуру в 1С. Рассмотрим пример логики построения такого алгоритма:
// Создание объекта связи с Word
Ворд = Новый COMОбъект("Word.Application");
Документ = Ворд.Documents.Open(ПутьКФайлу);
ТаблицаВорд = Документ.Tables(1); // Берем первую таблицу
// Проход по строкам и колонкам
Для НомерСтроки = 1 По ТаблицаВорд.Rows.Count Цикл
Для НомерКолонки = 1 По ТаблицаВорд.Columns.Count Цикл
Попытка
ЯчейкаВорд = ТаблицаВорд.Cell(НомерСтроки, НомерКолонки);
ТекстЯчейки = СокрЛП(ЯчейкаВорд.Range.Text);
// Убираем спецсимволы конца ячейки Word
ТекстЯчейки = Лев(ТекстЯчейки, СтрДлина(ТекстЯчейки) - 2);
// Заполняем область макета
Область = Макет.Область(НомерСтроки, НомерКолонки);
Область.Текст = ТекстЯчейки;
// Перенос базового форматирования
Область.Шрифт = Новый Шрифт(,, ЯчейкаВорд.Range.Font.Bold);
Исключение
// Обработка объединенных ячеек
КонецПопытки;
КонецЦикла;
КонецЦикла;
Использование объекта Word.Application позволяет программно считывать такие свойства, как PreferredWidth (предпочтительная ширина) и PaddingLeft (отступ слева), что дает возможность перенести форматирование с высокой точностью.
Выясним причину, по которой даже при самом тщательном переносе могут возникать минимальные расхождения. Проанализируем ключевые отличия платформ:
ТабличныйДокумент 1С форматирование применяется ко всему тексту сразу. Если в оригинале используется разное оформление слов в одном абзаце, в 1С придется либо использовать объект ПолеHTMLДокумента, либо разбивать одну ячейку на несколько мелких, что крайне трудоемко.Если требования заказчика к оформлению абсолютно бескомпромиссны, и стандартный макет 1С (MXL) не может их удовлетворить, стоит рассмотреть вариант Active Document. В этом случае вы загружаете файл Word непосредственно в конфигурацию как макет. При печати 1С будет запускать экземпляр Word внутри своего окна. Это гарантирует 100% идентичность, но накладывает ограничения: на компьютере пользователя обязательно должен быть установлен Microsoft Office, а работа с параметрами (заменой текста на данные из базы) потребует использования механизма закладок (Bookmarks) или поиска/замены через COM.
Таким образом, выбор метода зависит от сложности таблицы. Для простых форм идеально подойдет перенос через Excel, для критически важных по дизайну — метод «кальки», а для автоматизации — программный перебор ячеек через COM-соединение.